gpt4 book ai didi

c++和opencv获取并将像素颜色设置为Mat

转载 作者:IT老高 更新时间:2023-10-28 12:31:45 64 4
gpt4 key购买 nike

我正在尝试将某个像素的新颜色值设置为 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));

因此,根据需要更改 color 后,只需将其设置回来:

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>(y,x);

// ... do something to the color ....
color[0] = 13;
color[1] = 13;
color[2] = 13;

// set pixel
//image.at<Vec3b>(Point(x,y)) = color;
//if you copy value
}
}

关于c++和opencv获取并将像素颜色设置为Mat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23001512/

64 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com