gpt4 book ai didi

c++ - 根据另一个图像访问和更改像素的颜色 - opencv c++

转载 作者:太空宇宙 更新时间:2023-11-03 23:10:23 25 4
gpt4 key购买 nike

我有两种不同格式的图像。一种是 BGR,另一种是黑色和白色(只有黑色和白色,没有灰色像素)。它是完全相同的图像(相同的大小和像素)。我想找到黑白图像中的所有白色像素,将它们标记下来,然后在 BGR 图像中找到完全相同的像素(显然它们在 BGR 图像中是彩色的)并将它们涂成黑色。我试过了,但问题是黑白图像有 1 个 channel ,而 BGR 图像有 3 个 channel ,所以我失败了……我在 C++ 中使用 opencv感谢您的帮助! :)

for(int y=0;y<inputImage.rows;y++){
for(int x=0;x<inputImage.cols;x++){
Vec3b color = inputImage.at<Vec3b>(Point(x,y));
if(blackWhite.at<uchar>(y,x) == 255){
//cout << "found white pixel\n";
color[0] = 0;
color[1] = 0;
color[2] = 0;
inputImage.at<Vec3b>(Point(x,y)) = color;
}
}
}

inputImage 是我的 BGR 图像,而 blackWhite 是具有黑白像素的相同大小的图像。两者都是 Mat 对象。我想遍历 blackWhite 图像,每当我找到一个白色像素时,将 inputImage 图像中的相同像素涂成黑色。

最佳答案

我的策略是构造一个类似于您的黑白图像的数组。这个数组将是 0 和 1,我们将它与 inputImage 相乘以获得所需的输出。

目前,您的 blackWhite 图像看起来像(例如)

blackWhite = 255 255   0   0 ....
....

伪代码。如果我们把这张图片变成

newArray  =    0   0   1   1 ....
....

然后您可以使用 cv::multiply (newArray, inputImage) 以获得所需的输出。

将现有的 blackWhite 图像直接转换为 newArray 的一种方法是对 blackWhite 中的每个像素执行 y = (-1/255)*x + 1。您可以使用 cv::Mat::convertTo 完成此操作(输出图像, 8, -1/255, 1)

关于c++ - 根据另一个图像访问和更改像素的颜色 - opencv c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51326778/

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