为什么在通过imread加载图像后像素值为0?

时间:2013-06-05 22:27:23

标签: c++ opencv

我使用imread(..,... - GRAYSCAle)将图像(png)文件直接从3个通道添加到1个通道,我可以看到灰度图像,但像素值为0,而不是1.任何帮助非常感谢!

cv::Mat image=cv::imread(filename1, CV_LOAD_IMAGE_GRAYSCALE);
if (!image.data){
    std::cout<<"Problem laoding image";
}

cv::namedWindow("Window1");
cv::imshow("Window1",image);

for (i=0;i<720;i++){
    for (j=0;j<720;j++){

        std::cout<<image.at<int>(j,i)<<std::endl;
        //printf("%d \t", vPixel);
    }
}

1 个答案:

答案 0 :(得分:1)

OpenCV将图像加载为CV_8UCX(在您的情况下,它将是CV_8UC1)类型。因此,要打印所有像素值,您应使用模板参数at()unsigned char调用uchar

for (int i = 0;i < image.rows; i++) {
  for (int j = 0; j < image.cols; j++) {
    std::cout<<image.at<uchar>(i, j)<<std::endl;
  }
}
  1. 请记住在代码中翻转i和j。
  2. 灰度值的范围是0(黑色)-255(白色),因此如果像素是纯白色,您可能会看到255而不是1。