c++ - 从位图图像文件中读取像素数据值

标签 c++ windows visual-studio-2010 opencv bitmap

这是我用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/

相关文章:

c++ - 我的 C++ Unity 插件在编辑器中运行一次但没有运行两次

c++ - 如何生成一个范围内的随机数?

c++ - 使用 C++ 中的 SetWinMetaFileBits api 将 wmf 文件转换为 emf 文件

c++ - 如何在 C++ 中找到基础文件类型?

c# - 如何使用 Visual Studio(和/或 ReSharper)从类字段生成构造函数?

visual-studio-2010 - tfs 2010如何防止 checkin 时锁定

c++ - undefined symbol - 符号查找错误

java - MySQL mysqldump from Java code on Win7问题

C# 将 ListBox.SelectedItems 复制到另一个变量

visual-studio-2010 - 从 C :\Windows\SysWOW64 instead of PATH value 加载的 dll (libeay32)