我是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位单通道图像。