C++ 图像处理中的腐蚀
我在下面写了这段代码,结果很糟糕,谁能帮我一下,告诉我怎么了?我是用Qt写的。如果有人能帮助我,那就太好了 我的矩阵只是一些随机积分0或1C++ 图像处理中的腐蚀,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
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图像后,它就被窃听了。。。愚蠢的错误,谢谢你的博客文章,它帮助我找到了很多新的方法