c ++ opencv访问像素值不正确

时间:2017-04-04 22:49:27

标签: c++ opencv

当我使用img.at(y,x)访问C ++中的像素值时遇到了一些问题,这是我的代码:

std::less_equal

所以函数将迭代所有像素,然后如果它是255打印1,则休息。

这是a.jpg图片: enter image description here

但它打印出来的那样

   int main( int argc, char** argv )
{
    Mat image;
    image = imread("a.jpg",-1);   
 int a;
  for(int x = 0; x<image.rows;x++)
    {
      cout<<endl;
      for(int y = 0; y< image.cols; y++)
      {
       a = (int)image.at<uchar>(y,x);
       if(a>200)
       {
       cout<<"1 ";
       }else{
       cout<<a<<" ";
       }
      }
    }
}

有谁知道原因?我试过8bit jpg,16 bit tiff,png,输出都很奇怪,应该是图像形状(白色部分)

它在python上工作得很好,这是最奇怪的事情

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:2)

在您的代码中,您将x设置为row,将y设置为列。从矩阵中读取时必须互换变量。此公式是行顺序而非列顺序。

a = (int)image.at<uchar>(x,y);

您还可以阅读以下有关行顺序和列顺序之间混淆的SO post

答案 1 :(得分:0)

image = imread("a.jpg", CV_LOAD_IMAGE_GRAYSCALE);