【问题标题】:weird issue when subtracting two images [closed]减去两个图像时的奇怪问题[关闭]
【发布时间】:2012-04-26 20:00:54
【问题描述】:

这些问题是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;

【问题讨论】:

  • 你的问题到底是什么?
  • 请不要直接发大图。上传前压缩或调整大小。浏览低速连接很困难。

标签: image-processing opencv


【解决方案1】:

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

所以当你减去时,你是从原始正方形中减去一个缩小的正方形,留下你的边界。

所以在这种情况下,您必须执行与腐蚀相反的功能,即膨胀。它扩大了白色区域。它不会带回您的信件,因为它们已经被删除了。

但我认为您无法完全擦除白色方块,因为膨胀不会给出确切的方块。你可以比你的问题更好,仅此而已。

检查下面的这些图片。原图:

下面是先腐蚀后膨胀的结果:

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

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

【讨论】:

    猜你喜欢
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 2012-12-08
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多