C++ 有没有办法更改2图像的像素?

C++ 有没有办法更改2图像的像素?,c++,opencv,C++,Opencv,jpg 我想检查第二张图像,看看像素是否为白色,如果是白色,我应该将其更改为黑色像素,并且我应该能够将第二张图像中相同点的像素更改为第一张图像中的黑色或白色。。 例子: 坐标(100100)处的img第二幅图像中的像素是白色的,我应该能够将其更改为黑色。然后,在同一坐标(100100)处的第一个img,像素将是黑色的,我应该能够将其更改为白色。减少噪音。下面的代码向您展示了如何在图像中找到一个点,查看它是否为白色,如果为黑色,则将其更改为黑色 Scalar colourInSecondImage

jpg

我想检查第二张图像,看看像素是否为白色,如果是白色,我应该将其更改为黑色像素,并且我应该能够将第二张图像中相同点的像素更改为第一张图像中的黑色或白色。。 例子:
坐标(100100)处的img第二幅图像中的像素是白色的,我应该能够将其更改为黑色。然后,在同一坐标(100100)处的第一个img,像素将是黑色的,我应该能够将其更改为白色。减少噪音。

下面的代码向您展示了如何在图像中找到一个点,查看它是否为白色,如果为黑色,则将其更改为黑色

Scalar colourInSecondImage = img2.at<uchar>(y,x);

if(colourInSecondImage .val[0]==255 && colourInSecondImage .val[1]==255 && colourInSecondImage .val[2]==255)
{
    // Then your point is a white point
    img2.at<uchar>(y,x) = Scalar(0,0,0);
}
Scalar colorInSecondImage=img2.at(y,x);
if(colorInSecondImage.val[0]==255&&colorInSecondImage.val[1]==255&&colorInSecondImage.val[2]==255)
{
//那么你的观点是白点
img2.at(y,x)=标量(0,0,0);
}

我有点被你的问题弄糊涂了,似乎你想访问另一幅图像中的同一点并将其设置为黑色?还是同样的颜色?无论哪种方式,您都将使用与上面代码中相同的方法。将im2更改为img1

这就是如何循环所有像素值并对其进行操作的方法

 for(int r = 0; r < image.rows; r++) {
        for(int c = 0; c < image.cols; c++) {
           // if pixel is white
           if(image.at<uchar>(r,c) == 255) {
               image.at<uchar>(r,c) = 0;
           }
      }
 }

第二张图是什么?我只看到一幅。第二幅图像的颜色为(int y=0;ysplit(image,spl); imshow("spl1",spl[0]);//b imshow("spl2",spl[1]);//g imshow("spl3",spl[2]);//r