Использование изображения в качестве маски для другого

#c #image-processing #opencv

#c #обработка изображений #opencv

Вопрос:

Я новичок в OpenCV, и у меня есть несколько вопросов:

Как я могу использовать одно изображение в качестве маски для другого изображения?

Например, у меня есть изображение, содержащее пустой круг, а другое изображение содержит круг с содержимым (не пустым) и фоном.

Как я могу извлечь общие части двух изображений в новом изображении?

Я попытался извлечь пиксель за пикселем, чтобы выполнить операцию (И), но это не удается!

Кто-нибудь может помочь мне получить несколько идей!

Я пробую следующий код (который я нашел здесь), но он выдает неверный результат!

Я попробовал это с двоичным изображением, заменив

 CvScalar bgr = cvScalar(b, g, r);
cvSet2D(mask, iy y, ix x, bgr);
  

с

 CvScalar bgr = cvScalar(b);
cvSet2D(mask, iy y, ix x, b);
  

 void processImage(IplImage* mask, IplImage* source, int x, int y) {
    int b,g,r;
    for (int ix=0; ix<source->width; ix  ) {
        for (int iy=0; iy<source->height; iy  ) {
            //r = cvGet2D(source, iy, ix).val[2] * cvGet2D(mask, iy, ix).val[2];
            //g = cvGet2D(source, iy, ix).val[1] * cvGet2D(mask, iy, ix).val[1];;
            b = cvGet2D(source, iy, ix).val[0] * cvGet2D(mask, iy, ix).val[0];

            CvScalar bgr = cvScalar(b); //, g, r);
            cvSet2D(mask, iy y, ix x, b); //gr);
        }
    }
}
  

Комментарии:

1. Было бы действительно полезно, если бы вы показали свой код, чтобы другие могли объяснить, что вы делаете неправильно. В противном случае люди просто пишут код для вас.

2. Я действительно не хочу, чтобы кто-то писал мне код здесь, мне просто нужны несколько советов, но поскольку вы упомянули об этом, я разместил код сейчас … спасибо

Ответ №1:

Если я правильно понимаю, у вас есть маска (двоичное изображение), и вы хотите совместить ее с вашим исходным изображением. Попробуйте это:

cvAnd(source, source, destination, mask)

Этот дубль source не является опечаткой. Вы просто сравниваете source с самим собой (без операции), но только для тех пикселей в mask , которые «включены» (то есть, != 0 ). Обратите внимание, что маска должна быть 8-разрядным одноканальным изображением.