【问题标题】:converting Mat to iplimage* in opencv在opencv中将Mat转换为iplimage *
【发布时间】:2014-02-15 00:49:32
【问题描述】:

我是 opencv 和 c++ 的新手。 iplimage 和 iplimage* 有什么区别? 我在 arg[1] 中使用了需要 iplimage* 的 cvHaarDetectObjects。我有一个 Mat 格式的框架。如何将 Mt 转换为 iplimage*? (我找到了一种将 mat 转换为 iplimage 但不转换为 iplimage* 的方法。

真实的是:

iplimage* frame=cvLoadImage("1.jpg");
objects = cvHaarDetectObjects( frame, face_cascade, storage, scale_factor, 1 );

但我想使用:

Mat frame;
//some functions are performed on frame
objects = cvHaarDetectObjects( frame, face_cascade, storage, scale_factor, 1 );

【问题讨论】:

    标签: opencv iplimage mat


    【解决方案1】:

    IplImage* 是指向图像数据结构 IplImage 的指针。在opencv的C API中使用。

    opencv 2.0之后,引入了C++ API,“Mat”结构取代了IplImage。

    C API 函数接受 IplImage* 而不是 IplImage,C++ API 函数接受 Mat。

    两种解决方案:

    Mat frame;
    // apply pre-processing functions
    IplImage* frame2 = cvCloneImage(&(IplImage)frame);
    objects = cvHaarDetectObjects(frame2, face_cascade, storage, scale_factor, 1 );
    

    使用C++ API function 接受&frame,与haardetectobjects 做同样的工作。

    【讨论】:

      【解决方案2】:

      如果你已经有了 Mat 格式的图片,你应该试试这个函数调用

      void CascadeClassifier::detectMultiScale(const Mat& image, vector<Rect>& objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size());
      

      来自坎伯克答案中的链接

      或者试试这个

      IplImage iplframe = IplImage( frame );
      objects = cvHaarDetectObjects( &iplframe, face_cascade, storage, scale_factor, 1 );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多