使用 openCV 在 C++ 中查看灰度 RAW 图像文件
Posted
技术标签:
【中文标题】使用 openCV 在 C++ 中查看灰度 RAW 图像文件【英文标题】:View greyscale RAW image file in C++ using openCV 【发布时间】:2013-03-10 10:31:16 【问题描述】:我有一个原始图像文件,其中包含从第 5 个字节开始的图像数据。 文件中的每个字节代表一个 8 位灰度像素强度。 我已经能够将图像的二进制数据存储在二维无符号字符数组中。
谁能告诉我如何使用数组或文件在openCV中显示图像?
现在我正在使用这个代码:
void openRaw()
cv::Mat img(numRows,numCols,CV_8U,&(image[0][0]);
//img.t();
cv::imshow("img",img);
cv::waitKey();
但它显示错误的图像。
我也尝试过使用 IplImage 方法,但我不确定如何将指针传递给那里的源图像。
谁能给我一些代码?
谢谢, 乌代
【问题讨论】:
如果图像数据从第 5 个字节开始,那么我猜它并不是那么原始。前面的字节是否包含分辨率?这有点难猜,除非它是一个完美的正方形...... 【参考方案1】:“我已经能够将图像的二进制数据存储在二维无符号字符数组中。”
这是你的问题。
opencv 将像素数据存储在连续的 uchar* 中,因此它期望你也一样。
你的二维数组很可能是一个指针数组,它不一样。
so: 代替二维数组,制作一维数组:
uchar *data = new uchar[rows * cols];
你可以像这样访问单个像素:
uchar pixel = data[y*cols+x];
然后将数据指针传递到您的 cv::Mat :
cv::Mat img( rows, cols, CV_8U, data );
哦,请不要再使用 IplImages(又名 1.0 api),不惜一切代价避免使用!
【讨论】:
谢谢!这就像一个魅力!不过我想问一件事,我们可以像在 unsigned char 上那样对 uchar 执行所有算术运算吗?以上是关于使用 openCV 在 C++ 中查看灰度 RAW 图像文件的主要内容,如果未能解决你的问题,请参考以下文章
将灰度、彩色和精巧的图像(3)全部复制到一个大的 IplImage:Opencv 错误?