代码之家  ›  专栏  ›  技术社区  ›  Spredzy

如何在opencv 2.0中转换iplimage变量类型中的mat变量类型?

  •  12
  • Spredzy  · 技术社区  · 15 年前

    我正在尝试在OpenCV中旋转图像。

    我使用了在堆栈溢出中找到的代码:

    Mat source(img);
    Point2f src_center(source.cols/2.0, source.rows/2.0);
    Mat rot_mat = getRotationMatrix2D(src_center, 40.0, 1.0);
    Mat dst;
    warpAffine(source, dst, rot_mat, source.size());
    

    一旦我拥有了自己 dst Mat 变量类型已填充,我想将其放回 IplImage 变量类型,知道怎么做吗?

    4 回复  |  直到 8 年前
        1
  •  17
  •   jeff7    15 年前

    在新的OpenCV 2 C++接口中,实际上不必从两个之间来回切换。 Mat IplImage ,但如果您愿意,可以使用 I图像 操作员:

    IplImage dst_img = dst;
    

    请注意,只创建ipliimage头,数据(像素)将被共享。有关更多信息,请参阅 OpenCV C++ interface image.cpp 例中 OpenCV-2.0/samples/c 目录。

        2
  •  15
  •   lumapu    11 年前

    因为拥有整个 IplImage 对象,我使用了以下代码:

    Mat matImage;
    IplImage* iplImage;
    
    iplImage = cvCreateImage(cvSize(640,480), IPL_DEPTH_8U, 1);
    iplImage->imageData = (char *) matImage.data;
    

    您还可以复制数据而不是指针:

    memcpy(iplImage->imageData, matimage.data, 640*480);
    
        3
  •  1
  •   rics    15 年前

    诺曼在 his blog 描述以下内容(虽然它不是2.0,但它应该适用于您的问题。)

    要从cvmat转换为ipliimage,请使用以下函数:

    IplImage* cvGetImage( const CvArr* arr, IplImage* image_header );  
    

    函数cvgetimage返回可以是matrix-cvmat*或image-ipliimage*的输入数组的图像头。 对于图像,函数只返回输入指针。 在cvmat*的情况下,它用输入矩阵的参数初始化图像头结构。 用途:

    IplImage stub, *dst_img;
    dst_img = cvGetImage(src_mat, &stub);
    
        4
  •  0
  •   Vinoj John Hosan    8 年前

    在OpenCv2.4及更高版本中,我们可以通过

    cv::Mat inMat;
    //do the stuffs
    IplImage* outIPL = (IplImage*)(&IplImage(inMat));
    
    推荐文章