iplimage to mat 32位转换错误

时间:2012-02-07 13:02:07

标签: opencv

我想将iplimage转换为cv :: mat(不是CvMat)。使用此代码,值主题将溢出...

IplImage mhi32f = cvCreateImage(cvSize(draw_rect.width,draw_rect.height), IPL_DEPTH_32F, 1);
cv::Mat mhi32_mat(mhi32f);
mhi32_mat.convertTo(mhi32_mat,CV_32FC1);

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

首先,IplImage mhi32f = ...应为IplImage* mhi32f = ...,但我认为这是您的错字。

您的示例很好,但您不需要convertTo电话。如果要将IplImage数据复制到Mat对象,只需将true作为第二个参数传递给构造函数,如图here所示。

以下示例显示该类型已为CV_32FC1

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
    IplImage* mhi32f = cvCreateImage(cvSize(320, 240), IPL_DEPTH_32F, 1);
    cv::Mat mhi32_mat(mhi32f);

    assert(mhi32_mat.type() == CV_32FC1);

    cout << "Already a CV_32FC1 matrix..." << endl;

    return 0;
}

希望有所帮助。

答案 1 :(得分:2)

正如here解释的那样,你只需要这样做

Mat imgMat(iplimg);  //Construct an Mat image "img" out of an IplImage