【halcon】paint_region, write_image и compose3

фон

Я собирал картинки на сайте и мне нужно было изначально отсеять НГ и ОК картинки.Я обнаружил, что после того как я получил оригинальные НГ картинки, НГ не видно невооруженным глазом, или их было сложно найти. В данный момент я хочу сохранить НГ и в то же время сохранить изображение с отмеченной позицией НГ.

Использование оператора

paint_region (SelectedRegions1, Image, ImageResult, [0,255,0], 'fill')

Среди них SelectedRegions1 — это отфильтрованная область NG, а image — исходное изображение.
[0,255,0] представляет RGB, а [0,255,0] отмечает область зеленым цветом.
Paint_region нарисует еще один регион SelectedRegions1 на основе изображения.
Результатом является ImageResult. «Заполнить» означает способ заполнения области. В противном случае вы можете выбрать маржу.
С помощью ImageResult мы можем использовать:
write_image (ImageResult, «tiff», 0, «sss»)
, чтобы сохранить изображение локально. tiff — формат изображения. 0, указывающий, какой цвет использовать для заливки за пределами области изображения. Третий — название сохраненной картинки.

Придя на место сбора, я обнаружил, что приведенный выше код прошел проверку, но не увидел отметки, отображаемой на исходном изображении.
В итоге я обнаружил, что причина в том, что при тестировании я использовал 24-битную 3-канальную картинку. На месте было собрано 8-битное одноканальное изображение.

Итак, вопрос в том, как сохранить цвет в одноканальных изображениях? Перейдите непосредственно к коду:

paint_region (SelectedRegions1, Image, imgR, 0, 'fill')
paint_region (SelectedRegions1, Image, imgG, 255, 'fill')
paint_region (SelectedRegions1, Image, imgB, 0, 'fill')
compose3 (imgR, imgG, imgB, MultiChannelImage)
write_image (MultiChannelImage, 'tiff', 0, 'sss')

Затем мы сначала строим три изображения на основе одноканального исходного изображения и раскрашиваем отмеченные места соответственно.
Тогда поговорим еще о трех картинках, объединим их в 3-канальную картинку в порядке RGB через Compose3!

Ниже приведен соответствующий код C#.

 if (img.CountChannels() == 1)
 {
    
    
      HOperatorSet.PaintRegion(markRegion, img, out imgR, new HTuple(255), "fill");
      HOperatorSet.PaintRegion(markRegion, img, out imgG, new HTuple(0), "fill");
      HOperatorSet.PaintRegion(markRegion, img, out imgB, new HTuple(0), "fill");
      HOperatorSet.Compose3(imgR, imgG, imgB, out ho_ImageResult);
      HOperatorSet.WriteImage(ho_ImageResult, "tiff", 0, fullMarkPath);
  }
  else
  {
    
    
      HOperatorSet.PaintRegion(markRegion, img, out ho_ImageResult, ((new HTuple(255)).TupleConcat(0)).TupleConcat(0), "fill");
      HOperatorSet.WriteImage(ho_ImageResult, "tiff", 0, fullMarkPath);
  }

В коде img.CountChannels() используется для определения количества каналов изображения, а затем выполняется различная обработка в зависимости от количества каналов.

краткое содержание

В этом примере мы используем следующие операторы:
1. Paint_region добавляет область к изображению.
2. write_image сохраняет изображение локально.
3. Compose3 объединяет одноканальные изображения для создания трехканального изображения.
4. count_channels получает количество каналов изображения.

Guess you like

Origin blog.csdn.net/songhuangong123/article/details/132159667