【问题标题】:Conversion from Iplimage to Mat doesn't retain depth information从 Iplimage 到 Mat 的转换不保留深度信息
【发布时间】:2023-04-05 06:32:01
【问题描述】:

好的...我不知道我缺少什么,但是 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

【问题讨论】:

    标签: c++ opencv


    【解决方案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。
    • 嗯……这就解释了。谢谢您的帮助。您能否编辑您的回复以在回复中包含您的评论。这就是我错过的重点。
    猜你喜欢
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    相关资源
    最近更新 更多