C++ can';t更改图像Mat opencv中的所有像素

C++ can';t更改图像Mat opencv中的所有像素,c++,image,opencv,image-processing,C++,Image,Opencv,Image Processing,我有一个灰色的图像,我想把图像中的所有像素值都变成白色 我尝试以下代码: int main(int argc,字符**argv){ cv::Mat img=cv::imread(“C:/mata.jpg”); 对于(int i=0;i

我有一个灰色的图像,我想把图像中的所有像素值都变成白色

我尝试以下代码:


int main(int argc,字符**argv){

cv::Mat img=cv::imread(“C:/mata.jpg”);
对于(int i=0;i
图像大小:37 x 29

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


有人能帮我吗?

您的图像可能是一个RGB图像,显示为灰度。这意味着每个通道共享相同的值,或者红色、绿色和蓝色值都相等。尝试以灰度形式读取图像,或执行从颜色到灰度的手动转换

这样做:

int main(int argc, char** argv) {
    cv::Mat img = cv::imread("C:/mata.jpg", cv::IMREAD_GRAYSCALE); // Change here

    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);
}
int main(int argc,char**argv){
cv::Mat img=cv::imread(“C:/mata.jpg”,cv::imread_GRAYSCALE);//在此处更改
对于(int i=0;i
。。。或者这样做:

int main(int argc, char** argv) {    
    cv::Mat img_colour = cv::imread("C:/mata.jpg"); // Change here

    cv::Mat img;
    cv::cvtColor(img_colour, img, cv::CV_BGR2GRAY); // Change

    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); 
}
intmain(intargc,char**argv){
cv::Mat img_color=cv::imread(“C:/mata.jpg”);//在此处更改
cv::Mat img;
cv::cvt颜色(img_颜色、img、cv::cv_bgr2灰色);//更改
对于(int i=0;i
您的图像可能是RGB图像,可视为灰度。这意味着每个通道共享相同的值,或者红色、绿色和蓝色值都相等。尝试以灰度形式读取图像,或执行从颜色到灰度的手动转换

这样做:

int main(int argc, char** argv) {
    cv::Mat img = cv::imread("C:/mata.jpg", cv::IMREAD_GRAYSCALE); // Change here

    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);
}
int main(int argc,char**argv){
cv::Mat img=cv::imread(“C:/mata.jpg”,cv::imread_GRAYSCALE);//在此处更改
对于(int i=0;i
。。。或者这样做:

int main(int argc, char** argv) {    
    cv::Mat img_colour = cv::imread("C:/mata.jpg"); // Change here

    cv::Mat img;
    cv::cvtColor(img_colour, img, cv::CV_BGR2GRAY); // Change

    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); 
}
intmain(intargc,char**argv){
cv::Mat img_color=cv::imread(“C:/mata.jpg”);//在此处更改
cv::Mat img;
cv::cvt颜色(img_颜色、img、cv::cv_bgr2灰色);//更改
对于(int i=0;i
正如其他答案和评论中所建议的,您将图像读取为BGR而不是灰度。
另一种既适用于灰度图像又适用于彩色图像的方法是完全避免手动循环,而是编写以下内容:

img.setTo(cv::Scalar::all(255));


查看更多变体。

正如其他答案和评论中所建议的,您将图像读取为BGR而不是灰度。
另一种既适用于灰度图像又适用于彩色图像的方法是完全避免手动循环,而是编写以下内容:

img.setTo(cv::Scalar::all(255));


查看更多变体。

您的图像不是灰度图像。它正在加载为3通道图像。试试这个:
cv::Mat img=cv::imread(“C:/mata.jpg”,cv::imread\u灰度)imread(“image”,0)
您使用的标志用于转换图像。您的图像不是灰度图像。它正在加载为3通道图像。试试这个:
cv::Mat img=cv::imread(“C:/mata.jpg”,cv::imread\u灰度)imread(“image”,0)
您使用的标志用于转换图像。非常好的优化+1.优化很好+1.