我只想仔细检查我设置的 ROI 是否正确。因此,我希望能够将 ROI 输出为图像。ROI 使用 cvRect 作为第二个参数,我真的不知道如何将该区域转换为图像。我希望能够使用 cvRect 中的值来确定最终图像。这可能吗?
cvSetImageROI(frame,cvRect((*pt[0]).x,(*pt[0]).y,abs(ROIwidth),abs(ROIheight)));
您可以将 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);
使用我建议初学者使用的 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
请注意,从IplImage
to的转换cv::Mat
是直接使用:
IplImage* img = cvLoadImage("my_img.jpg", 1);
cv::Mat new_img(img); // convert IplImage* -> Mat