我有一个原始图像文件,其中包含从第5个字节开始的图像数据。 文件中的每个字节代表8位灰度像素强度。 我已经能够将图像的二进制数据存储在二维无符号字符数组中。
有谁能告诉我如何使用数组或文件在openCV中显示图像?
现在我正在使用此代码:
void openRaw() {
cv::Mat img(numRows,numCols,CV_8U,&(image[0][0]);
//img.t();
cv::imshow("img",img);
cv::waitKey();
}
但它显示的是错误的图像。
我也尝试过使用IplImage方法,但我不知道如何将指针传递给那里的源图像。
有人可以为我提供一些代码吗?
谢谢, 乌代
答案 0 :(得分:0)
“我已经能够将图像的二进制数据存储在二维无符号字符数组中。”
这是你的问题。
opencv将像素数据存储在连续的uchar *中,所以它期望你也一样。
你的2d数组很可能是一个指针数组,它不一样。
所以:代替2d数组,制作1d:
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),不惜一切代价避免使用!