Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 图像处理中的腐蚀_C++_Qt_Image Processing - Fatal编程技术网

C++ 图像处理中的腐蚀

C++ 图像处理中的腐蚀,c++,qt,image-processing,C++,Qt,Image Processing,我在下面写了这段代码,结果很糟糕,谁能帮我一下,告诉我怎么了?我是用Qt写的。如果有人能帮助我,那就太好了 我的矩阵只是一些随机积分0或1 while( x < obraz.width()) { while( y < obraz.height()) { piksel2 = obraz.pixel(x, y); kolor2 = QColor::fromRgb(piksel2); minR = kolor2.red(); minG = k

我在下面写了这段代码,结果很糟糕,谁能帮我一下,告诉我怎么了?我是用Qt写的。如果有人能帮助我,那就太好了

我的矩阵只是一些随机积分0或1

while( x < obraz.width())
{
    while( y < obraz.height())
    {
    piksel2 = obraz.pixel(x, y);
    kolor2 = QColor::fromRgb(piksel2);
    minR = kolor2.red();
    minG = kolor2.green();
    minB = kolor2.blue();

       for(i = 0; i < w; i++)
        {
            for(j = 0; j < h; j++)
            {

                if (matrix[i][j] == 1 && x - o + i >= 0 && y - u + j >= 0 && x - o + i < obraz.width() && y - u + j < obraz.height())
                {
                    piksel = obraz.pixel(x - o + i, y - u + j);
                    kolor = QColor::fromRgb(piksel);

                    if (kolor.blue() < minB)
                    {
                    minB = kolor.blue();
                    }
                     if(kolor.green() < minG)
                 {
                    minG = kolor.green();
                 }

                    if(kolor.red() < minR)
                   {
                   minR = kolor.red();
                }
                }

            }

       }
        obraz.setPixel(x, y, qRgb(minR, minG, minB));

        y++;
    }
    y=1;
    x++;
}
while(x=0&&y-u+j>=0&&x-o+i
输入文件:

输出文件:


代码的主要问题是,它会将每个像素的结果写入输入图像。计算下一个像素的最小值时将使用此结果。因此,图像左上角的暗斑会在整个图像中传播

对于这种类型的算法来说,重要的是写入一个单独的输出缓冲区,在处理完整个图像之前保持输入不变


还要注意的是,对于灰度图像,侵蚀定义得很好,但对于彩色图像,侵蚀定义得不好。您似乎希望应用边际排序,这相当于独立计算每个通道的侵蚀。请注意,此方法将为图像引入新颜色。有更好的方法,但都有一些缺点。几年前我写了一篇关于这个的小概述。

外部循环使用了
kolor
,它似乎没有被赋值。仅适用于
minG
minB
minR
kolor2
初始化。看起来像是打字错误。这是因为kolor.blue()在Qt中得到INT值,它从piksel=obraz.pixel中得到值…,我用它来搜索图像中的最小值。矩阵是一种类似于形状的东西,如果我没有错误地理解,当我在循环的顶部写入它时,你会侵蚀图像,你有
piksel2=。。。;kolor2=minG=kolor.green()
而不是
minG=kolor2.green()。你确定你是那个意思吗
kolor
在那一点上似乎没有被分配。我没有看到,我改变了。但当我运行这个侵蚀时,我得到的只是黑色图像…@Eshelnah非常感谢。自从我开始制作oryginal图像后,它就被窃听了。。。愚蠢的错误,谢谢你的博客文章,它帮助我找到了很多新的方法