【问题标题】:openCV get subimage in CopenCV在C中获取子图像
【发布时间】:2012-07-28 09:15:57
【问题描述】:

我在 C 语言中使用 OpenCV 进行图像处理。如果文档中回答了这个问题,请原谅我,但我发现 OpenCV 文档的格式非常糟糕且难以阅读。

我有一个CvMat*,我从一个图像文件中提取如下:

CvMat* mat = cvLoadImageM((char*) filename, CV_LOAD_IMAGE_COLOR);

我需要做的是通过裁剪某个有界区域来获得子图像。一个合乎逻辑的命令可能是:

CvMat* subMat = cvGetSubImage(mat, minx, maxx, miny, maxy);

其中minxmaxxminymaxy 定义裁剪区域的边界。有没有内置的方法可以轻松做到这一点?

【问题讨论】:

    标签: c image opencv


    【解决方案1】:

    通常这是通过裁剪ROI(感兴趣区域)来完成的。这个blog post 详细介绍了裁剪:

    /* load image */
    IplImage *img1 = cvLoadImage("elvita.jpg", 1);
    
    /* sets the Region of Interest
       Note that the rectangle area has to be __INSIDE__ the image */
    cvSetImageROI(img1, cvRect(10, 15, 150, 250));
    
    /* create destination image
       Note that cvGetSize will return the width and the height of ROI */
    IplImage *img2 = cvCreateImage(cvGetSize(img1),
                                   img1->depth,
                                   img1->nChannels);
    
    /* copy subimage */
    cvCopy(img1, img2, NULL);
    
    /* always reset the Region of Interest */
    cvResetImageROI(img1);
    

    要在 IplImage(旧版 OpenCV)和 cvMat(OpenCV 2.x)之间进行转换,只需使用 cvMat 构造函数或查看 this question 了解更多方法。

    【讨论】:

    【解决方案2】:

    看看http://nashruddin.com/OpenCV_Region_of_Interest_(ROI)/

    教程在其中对感兴趣区域执行以下操作:

    cvSetImageROI(img1, cvRect(10, 15, 150, 250));
    IplImage *img2 = cvCreateImage(cvGetSize(img1),
                               img1->depth,
                               img1->nChannels);
    cvCopy(img1, img2, NULL);
    cvResetImageROI(img1);
    

    OpenCV 具有内置功能,可以设置您关心的区域并将该区域从图像中复制出来,就像您想要实现的那样。

    【讨论】:

      【解决方案3】:

      如果您想要 src 图像的亚像素精确矩形部分,请使用 cvGetRectSubPix 或 cv::getRectSubPix(这会创建所有数据的单独副本,这不是 ROI!)

      例子:

      cv::Size size(dst_width,dst_height);
      cv::Point2f center(src_centerx,src_center_y);
      cv::Mat dst;
      cv::getRectSubPix(src,size, center,dst,CV_8U);
      

      【讨论】:

      • 哦,顺便说一句:对于我使用的 ROI:cv::Mat newRoi = srcMat(cv::Rect(roiX,roiY,roiW,roiH));
      猜你喜欢
      • 1970-01-01
      • 2018-08-26
      • 2016-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      相关资源
      最近更新 更多