【问题标题】:Using image as a mask to another使用图像作为另一个掩码
【发布时间】:2011-04-29 02:44:32
【问题描述】:

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

【问题讨论】:

  • 如果你展示你的代码真的很有帮助,这样其他人就可以解释你做错了什么。否则,人们只是在为你编写代码。
  • 我真的不希望有人给我写这里的代码,我只是需要一些提示,但是既然你提到了,我现在放代码...thanx

标签: c++ image-processing opencv


【解决方案1】:

如果我理解正确,您有一个蒙版(二进制图像),并且您想将它与您的源图像进行 AND。试试这个:

cvAnd(source, source, destination, mask)

那双source 没有错字。您只是将source 与自身进行与运算(无操作),但仅适用于mask 中“开启”的那些像素(即!= 0)。请注意,mask 必须是 8 位单通道图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-04
    • 2014-12-29
    • 1970-01-01
    • 2017-09-25
    • 2012-06-04
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    相关资源
    最近更新 更多