当前位置: 首页 > 知识库问答 >
问题:

基于另一种图像-opencv C++的像素颜色的访问和改变

厍兴腾
2023-03-14

我有两种不同格式的图像。一个是BGR,一个是黑白(只有黑白,没有灰色的彩色像素)。它是相同的精确图像(相同的大小和像素)。我想在黑白图像中找到所有的白色像素,标记下来然后在BGR图像中找到完全相同的像素(显然它们在BGR图像中是着色的),并将它们着色为黑色。我试过了,但问题是黑白图像有1个通道,而BGR图像有3个通道,所以我失败了...我正在使用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;
        }
    }
}

共有1个答案

孟跃
2023-03-14

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

当前,您的黑白图像看起来像(例如)

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

在伪代码中。如果我们将此图像转换成

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

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

直接将现有的黑白色图像转换为newArray的一种方法是在黑白色的每个像素上执行y=(-1/255)*x+1。您可以使用cv::mat::convertTo(输出,8,-1/255,1)来实现这一点

 类似资料:
  • 问题内容: 我想用Python更改单一颜色。 如果存在使用PIL的快速解决方案,我会更喜欢此解决方案。 此刻,我用 问题答案: 如果计算机上可用,请尝试执行以下操作: 它将使用多一点(3倍)的内存,但它应该快得多(〜5倍,但对于更大的图像,更多)。 另请注意,如果您只有RGB(而不是RGBA)图像,则上面的代码比需要的代码稍微复杂一些。但是,此示例将单独保留Alpha波段,而没有一个更简单的版本。

  • 对于给定的多色PNG(带透明度),最好的/快速的惯用方式是什么: 创建一个重复的 关于SO有几个相关的问题,但是我还没有找到有效的方法。

  • 嘿,我正在尝试做一个程序,它加载一个彩色图像作为灰度画布,然后返回颜色点击像素。当setrgb()方法没有做它应该做的事情时,我就被困在这里了。我已经通过getRGB()从原始图像中复制了颜色,并使用setRGB()将其分配给新图像。我试图输出两个像素颜色值,但他们不一样。请帮我解决这个问题。以下是到目前为止的代码:

  • 本文向大家介绍iOS 更改图像的颜色,包括了iOS 更改图像的颜色的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 问题内容: 我想从我的Fluke机器人那里得到一张图像,并确定图像中每个像素的颜色。然后,如果像素大部分为红色,请将其更改为完全绿色。如果像素大部分是绿色,请将其更改为完全蓝色。如果像素大部分是蓝色,请将其更改为完全红色。这是我能够做的,但是我无法使它工作以获取必须更改的图像。没有语法错误,这只是语义上的麻烦。我正在使用python。 我尝试的代码: 我也保存了如下图片: 问题答案: 我假设您正在

  • 问题内容: 我想打开jpeg图像文件,对其进行编码,更改一些像素颜色,然后将其保存回原样。 我想做这样的事情 我只是想不出一个可行的解决方案,因为编码图像文件后获得的默认图像类型没有Set方法。 谁能解释该怎么做?非常感谢。 问题答案: 成功解码后(以及特定的解码功能,如),返回的值。是一个接口,用于定义图像的只读视图:它不提供更改/绘制图像的方法。 该软件包提供了几种实现方式,这些实现方式通常允