Mat img_show = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, img->nChannels); cvCopy(img, img_show); cvRectangle(img_show, pt1, pt2, cvScalar(0, 255, 0)); cvShowImage("img", img_show); char key = cvWaitKey(10); cvSetImageROI(img_show, cvRect(pt1.x, pt1.y, abs(pt2.x - pt1.x), abs(pt2.y - pt1.y))); /*IplImage* roi = cvCreateImage(cvSize(abs(pt2.x - pt1.x), abs(pt2.y - pt1.y)), IPL_DEPTH_8U, img->nChannels); cvCopy(img_show, roi); cvResetImageROI(img_show);*/ imwrite("ROI.jpg", img_show);将这段代码修改正确
时间: 2023-11-20 16:05:24 浏览: 55
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
这段代码的问题已经被指出,应该将IplImage对象cvCreateImage()和cvCopy()函数替换为Mat对象的构造函数和赋值操作符,并将cvSetImageROI()函数替换为Mat对象的ROI操作。同时,也应该将cvScalar()函数替换为cv::Scalar()。
修改后的代码如下:
```cpp
Mat img_show(img->height, img->width, CV_8UC3);
img->copyTo(img_show);
rectangle(img_show, pt1, pt2, Scalar(0, 255, 0));
imshow("img", img_show);
char key = waitKey(10);
Mat roi(img_show, Rect(pt1.x, pt1.y, abs(pt2.x - pt1.x), abs(pt2.y - pt1.y)));
imwrite("ROI.jpg", roi);
if (key == 27) break;
```
这样就可以正确地创建Mat对象img_show,并在其中绘制矩形框和显示图像。同时,也可以通过ROI操作截取选中的部分,并保存为文件"ROI.jpg"。
阅读全文