【问题标题】:View greyscale RAW image file in C++ using openCV使用 openCV 在 C++ 中查看灰度 RAW 图像文件
【发布时间】: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 个字节开始,那么我猜它并不是那么原始。前面的字节是否包含分辨率?这有点难猜,除非它是一个完美的正方形......

标签: c++ opencv image-processing grayscale


【解决方案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 执行所有算术运算吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-04
  • 2011-07-29
  • 2017-08-30
  • 2014-09-15
  • 1970-01-01
相关资源
最近更新 更多