当我使用img.at(y,x)访问C ++中的像素值时遇到了一些问题,这是我的代码:
std::less_equal
所以函数将迭代所有像素,然后如果它是255打印1,则休息。
但它打印出来的那样
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上工作得很好,这是最奇怪的事情
任何帮助表示赞赏!
答案 0 :(得分:2)
在您的代码中,您将x设置为row,将y设置为列。从矩阵中读取时必须互换变量。此公式是行顺序而非列顺序。
a = (int)image.at<uchar>(x,y);
您还可以阅读以下有关行顺序和列顺序之间混淆的SO post。
答案 1 :(得分:0)
image = imread("a.jpg", CV_LOAD_IMAGE_GRAYSCALE);