无法更改图像中的所有像素Mat opencv

ann*_*nne 0 c++ opencv image image-processing

我有一个灰色图像,我想将该图像中的所有像素值更改为白色.

我试试这些代码:


int main(int argc, char** argv){

cv::Mat img = cv::imread("C:/mata.jpg"); for (int i = 0; i < img.rows; i++) { for (int j = 0; j < img.cols; j++) { img.at<uchar>(i, j) = 255; } } imshow("result", img); }
Run Code Online (Sandbox Code Playgroud)

图片大小:37 x 29

我已经检查了该循环中的像素总数,结果,我可以访问所有像素,但不能将图像中的所有像素变为白色(只有四分之一的图像变为白色,其他像素仍然具有相同的颜色原始图片).

有人可以帮帮我吗?

Adi*_*vit 5

正如其他答案和评论中所建议的那样,您正在将图像读取为BGR而不是灰度.
另一种适用于灰度和彩色图像的方法,它可以完全避免手动循环并改为编写:

img.setTo(cv::Scalar::all(255));
Run Code Online (Sandbox Code Playgroud)

要么

img = cv::Scalar::all(255);
Run Code Online (Sandbox Code Playgroud)

在这里查看更多变化.