我是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);
}
}
}
答案 0 :(得分:2)
如果我理解正确,你有一个掩码(二进制图像),你想要与你的源图像和它。试试这个:
cvAnd(source, source, destination, mask)
那个双source
没有拼写错误。您只是将source
与自身进行了对比(无操作),但仅适用于mask
中“开启”的那些像素(即!= 0
)。请注意,掩码必须是8位单通道图像。