减去两个图像时的奇怪问题

时间:2012-04-22 02:48:14

标签: image-processing opencv

这些问题是this one的关注,我有一个图像,我想从中删除徽标,我已经侵蚀了图像,直到所有的小文本消失,只剩下徽标,现在我有两个图像,原始图像和只有徽标的图像,现在当我试图减去两个图像以形成第三个只包含文本,一个奇怪的事情发生,徽标没有删除,但它的概述

代码:

cv::Mat final;
cv::Mat greyMat = [self.imageView.image CVGrayscaleMat];
cv::Mat bwMat,erodedMat;
cv::threshold(greyMat, bwMat, 128, 255, CV_THRESH_BINARY);
cv::bitwise_not(bwMat, bwMat);
cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(20, 12));
cv::erode(bwMat, erodedMat, element);
cv::dilate(bwMat, erodedMat, bwMat);//I used this to restore all the missed components of    the logo  during erosion,bwMat in the last argument acts as a mask, i didn't sure of this
std::vector<cv::Point>points;
cv::Mat_<uchar>::iterator it=bwMat.begin<uchar>();
cv::Mat_<uchar>::iterator end=bwMat.end<uchar>();
for (; it!=end; ++it) 
    if (*it) 
        points.push_back(it.pos());
final=bwMat-erodedMat;

1 个答案:

答案 0 :(得分:1)

我认为这是因为当您侵蚀图像时,白色区域会缩小。这会擦除你的字母,同时它也缩小了白色方块的面积。

因此,当您减去时,您将从原始方格中减去一个缩小的方格,从而为您留下边框。

所以在这种情况下你必须做相反的侵蚀功能,即扩张。它扩大了白色区域。它不会带回你的信件,因为它们已经删除了。

但我不认为你不能完全抹去白色方块,因为扩张不会给出确切的方形。你可以比你的问题更好,就是这样。

检查以下图片。原始图片:

enter image description here

现在,下面的结果是侵蚀,然后是扩张:

enter image description here

它们永远不会相同。所以当你减去它们时,就会有文物。

我在回答您的第一个问题时解释了另一种方法:how to detect region of large # of white pixels using opencv?