1

我只想仔细检查我设置的 ROI 是否正确。因此,我希望能够将 ROI 输出为图像。ROI 使用 cvRect 作为第二个参数,我真的不知道如何将该区域转换为图像。我希望能够使用 cvRect 中的值来确定最终图像。这可能吗?

  cvSetImageROI(frame,cvRect((*pt[0]).x,(*pt[0]).y,abs(ROIwidth),abs(ROIheight)));
4

2 回答 2

3

您可以将 ROI 复制到临时缓冲区中,然后保存该缓冲区。

IplImage* roi = cvCreateImage(cvSize(abs(ROIwidth),abs(ROIheight)),frame->depth, frame->nChannels);

cvSetImageROI(frame,cvRect((*pt[0]).x,(*pt[0]).y,abs(ROIwidth),abs(ROIheight)));

cvCopy(frame,roi);

cvResetImageROI(frame);

cvSaveImage("roi.jpg",roi);

cvReleaseImage(&roi);
于 2013-04-22T14:59:49.097 回答
1

使用我建议初学者使用的 opencv c++ API!

cv::Mat img; // my pre-loaded image
cv::Rect roi; // roi position (x,y,width,height)
cv::Mat img_roi(img, roi); // only create header = no copy!
cv::imwrite("my_roi.png",img_roi); // save

请注意,从IplImageto的转换cv::Mat是直接使用:

IplImage* img = cvLoadImage("my_img.jpg", 1);
cv::Mat new_img(img); // convert IplImage* -> Mat
于 2013-04-22T15:16:21.680 回答