我正在尝试将一些像素的新颜色值设置为cv :: Mat图像,我的代码如下:
Mat image = img;
for(int y=0;y<img.rows;y++)
{
for(int x=0;x<img.cols;x++)
{
Vec3b color = image.at<Vec3b>(Point(x,y));
if(color[0] > 150 && color[1] > 150 && color[2] > 150)
{
color[0] = 0;
color[1] = 0;
color[2] = 0;
cout << "Pixel >200 :" << x << "," << y << endl;
}
else
{
color.val[0] = 255;
color.val[1] = 255;
color.val[2] = 255;
}
}
imwrite("../images/imgopti"+to_string(i)+".tiff",image);
它似乎在输出中获得了良好的像素(使用cout),但是在输出图像中(使用imwrite),相关的像素不会被修改.我已经尝试过使用color.val [0] ..我仍然无法弄清楚为什么输出图像中的像素颜色不会改变.
谢谢
解决方法:
除了将新像素值复制回图像之外,您已完成所有操作.
该行将像素的副本复制到局部变量中:
Vec3b color = image.at<Vec3b>(Point(x,y));
因此,在根据需要更改颜色后,只需将其设置为:
image.at<Vec3b>(Point(x,y)) = color;
所以,完整的,像这样:
Mat image = img;
for(int y=0;y<img.rows;y++)
{
for(int x=0;x<img.cols;x++)
{
// get pixel
Vec3b color = image.at<Vec3b>(Point(x,y));
// ... do something to the color ....
// set pixel
image.at<Vec3b>(Point(x,y)) = color;
}
}