使用图像作为蒙版到另一个



我是OpenCV的初学者,我有一些问题:

如何使用一个图像作为遮罩到另一个图像?

例如,我有一个图像包含空圆圈,另一个图像包含内容(非空)和背景的圆圈。

如何在新图像中提取两个图像的共同部分?

我尝试逐像素提取(AND)操作,但失败了!

谁能给我提点主意?

我尝试下面的代码(我在这里找到的),但它产生错误的结果!

我尝试用二进制图像替换

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);
        }
    }
}

如果我理解正确,你有一个掩码(二进制图像),你想和你的源图像。试试这个:

cvAnd(source, source, destination, mask)

这里的双source不是打字错误。您只是将source与自身(无操作)结合,但仅适用于mask中"打开"的那些像素(即!= 0)。注意,掩码必须是8位单通道图像。

相关内容

  • 没有找到相关文章