从 Iplimage 到 Mat 的转换不保留深度信息
Posted
技术标签:
【中文标题】从 Iplimage 到 Mat 的转换不保留深度信息【英文标题】:Conversion from Iplimage to Mat doesn't retain depth information 【发布时间】:2013-01-04 15:40:14 【问题描述】:好的...我不知道我缺少什么,但是 opencv 文档说您可以从 IplImage 构造一个 Mat。我有一个 IplImage,但是在构建 Mat 之后,它会丢失深度信息。在将深度信息传递给 calcHist 函数之前,我需要检查它。
cout<<"image depth:"<<image->depth<<endl;
cout<<"image size: "<<image->height<<" "<<image->width<<endl;
Mat src(image);
cout<<"src depth:"<<src.depth()<<endl;
cout<<"src size: "<<src.size().height<<" "<<src.size().width<<endl;
我的输出看起来像这样。请注意,深度信息已消失:
image depth:8
image size: 257 109
src depth:0
src size: 257 109
【问题讨论】:
【参考方案1】:基本上是正确的,因为 CV_8U==0。详情请见here。
在IplImage
结构中加载图像时,深度设置为IPL_DEPTH_8U
,即8。
在Mat
结构中加载图片时,深度为CV_8U
,即为0。
我对一张普通的图片做了一个小测试:
Mat frame=imread(szImagefile,CV_LOAD_IMAGE_GRAYSCALE);
cout<<"image depth:"<<frame.depth()<<endl;
结果:
image depth:0
【讨论】:
这并不能解释为什么从 IplImage 转换为 Mat 时深度会发生变化。我同意如果我的 IplImage 是 CV_8U,那么我的 Mat 的深度应该是 0。 @qwerty9967 它没有改变。 IplImage 的深度设置为 IPL_DEPTH_8U,即 8,Mat 的深度设置为 CV_8U,即 0。 嗯……这就解释了。谢谢您的帮助。您能否编辑您的回复以在回复中包含您的评论。这就是我错过的重点。以上是关于从 Iplimage 到 Mat 的转换不保留深度信息的主要内容,如果未能解决你的问题,请参考以下文章
从 IplImage 转换为 Mat 且 cvarrToMat 缺少/跳过图像数据字节
opencv编程中错误提示:不存在从mat到cvmat适当的转换函数。