【问题标题】:Problem with manual erosion image in openCV c++ ( Binary image)openCV c ++中手动腐蚀图像的问题(二进制图像)
【发布时间】:2020-02-22 19:10:42
【问题描述】:

我正在编写用于腐蚀或膨胀的手动代码。而且我不知道为什么下面的代码不起作用。

如您所见,当我处于 (i,j) 点时,我会绕过该点并寻找任何白色像素。如果有任何地方(在 Little 3x3 矩阵 (ii,jj) 中)白色像素,我将 (i, j) 点更改为白色。

有人知道为什么它不起作用吗?

我确保自己加载了二进制图像。如果我计算白色和黑色像素,那么我就会知道正确的像素数。

 for (int i=1; i<gray.cols-1; i++)
    {
        for(int j=1; j<gray.rows-1; j++)
            {
                ii=i;
                jj=j;

                for (ii-1; ii<i+2; ii++ )
                {
                    for (jj-1; jj<j+2; jj++ )
                    {

                        if (gray.at<uchar>(ii,jj) ==255)
                            gray.at<uchar>(i,j) = 255;
                    };
                };
};

如果有人知道如何以不同的方式做到这一点?

【问题讨论】:

    标签: c++ xcode macos opencv


    【解决方案1】:

    您应该创建临时图像来写入腐蚀/膨胀的结果。您的问题是您正在写入原始图像。假设只有第一个像素是白色的。在第一次迭代中,您会将第二个像素着色为白色。然后在第二次迭代中,您将看到新着色的第二个像素和白色的第三个像素。对于所有的像素,依此类推。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 2015-10-11
      • 2020-03-19
      • 1970-01-01
      相关资源
      最近更新 更多