我想将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);
有什么建议吗?
答案 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