这是我用c++写的代码
int main()
{
Mat im = imread("C:/santhu/bitmap.bmp");
int rows = im.rows;
int cols = im.cols;
cout<<"rows\n"<<rows;
cout<<"cols"<<cols;
if (im.empty())
{
cout << "Cannot load image!" << endl;
return -1;
}
cout<<"the output for matrix of pixels";
for (int i = 0; i <cols ; i++)
{
Vec3b *ptr = im.ptr<Vec3b>(i);
for (int j = 0; j < rows; j++)
{
Vec3b pixel = ptr[j];
cout<<pixel<<"\t";
}
cout<<"\n";
}
getchar();
imshow("Image", im);
waitKey(0);
}
代码工作正常,直到它显示每个像素值
Vec3b
,但最后会出现类似“Unhandled exception at 0x75afb9bc in san.exe: Microsoft C++ exception: cv::Exception at memory location 0x0043f9d0..
”的异常提示窗口要求中断或继续流程
在命令控制台中,我正在获取要显示的像素值,在这里显示为 opencv error:assertion failed(y==0 ||(data && dims)=1 &&(unsigned) y <(unsigned)size.p[0] in cv::Mat::ptr,file c:\opencv\build\include\opencv2\core\mat.hpp,line 428
, 在显示像素数据之后。
我检查了整个网络和 mat.hpp
它也是给定的内联函数,所以我很沮丧,任何人都可以解释这个错误(异常)并帮助我让代码运行直到数据像素是它们在位图中并很好地执行。plz
最佳答案
你在这里混淆了行和列。
for (int i = 0; i <rows; i++) // rows, not cols
{
Vec3b *ptr = im.ptr<Vec3b>(i);
for (int j = 0; j < cols; j++) // cols, not rows
{
Vec3b pixel = ptr[j];
cout<<pixel<<"\t";
}
cout<<"\n";
}
关于c++ - 从位图图像文件中读取像素数据值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21550974/