zoukankan      html  css  js  c++  java
  • 【OpenCV开发】OpenCV3后IPLimage转换成MAT的问题

    IplImage* img1 = cvCreateImage(cvGetSize(resizeRes), IPL_DEPTH_8U, 1);//创建目标图像  

    Mat test = img1;  报错

    尝试常用的一些方法更改赋初始值仍报错

    (1)将IplImage类型转换到Mat类型

    Mat::Mat(const IplImage* img, bool copyData=false);

    默认情况下,新的Mat类型与原来的IplImage类型共享图像数据,转换只是创建一个Mat矩阵头。当将参数copyData设为true后,就会复制整个图像数据。

    例:

    IplImage*iplImg = cvLoadImage("greatwave.jpg", 1);

    Matmtx(iplImg); // IplImage* ->Mat 共享数据

    // or : Mat mtx = iplImg;

    (2)将Mat类型转换到IplImage类型

    同样只是创建图像头,而没有复制数据。

    例:

    IplImage ipl_img = img; // Mat -> IplImage

    (3)将CvMat类型转换为Mat类型

    与IplImage的转换类似,可以选择是否复制数据。

    Mat::Mat(const CvMat* m, bool copyData=false);

    (4)将Mat类型转换为CvMat类型

    与IplImage的转换类似,不复制数据,只创建矩阵头。


    以上基本转换方法均尝试过后都不成功,经过一番搜索终于找到大神如下解答:

    
    For the records: taking a look at core/src/matrix.cpp it seems that, indeed, the constructor cv::Mat(IplImage*) has disappeared.

    But I found this alternative:
    IplImage * ipl = ...;
        cv::Mat m = cv::cvarrToMat(ipl);  // default additional arguments: don't copy data.


    具体原因并不是很清楚,在取消了以前的一些方法后应该是将IPLimage创建出来的统一看做矩阵来处理,简化了部分程序处理。
  • 相关阅读:
    (转)干货|一次完整的性能测试,测试人员需要做什么?
    (转)JMeter性能测试-服务器资源监控插件详解
    【Android Apk重新签名报错re-sign.jar之解决方法】
    CrackMe_001
    判断二叉树是否是镜像对称
    顺时针打印矩阵
    利用前序遍历和中序遍历构造二叉树
    二叉树的四种遍历方式
    最长回文子串
    同步/异步/阻塞/非阻塞
  • 原文地址:https://www.cnblogs.com/huty/p/8517113.html
Copyright © 2011-2022 走看看