我正在对图像进行椭圆识别,为此我打开了一张简单的图片:
img = imread("M:/Desktop/PsEyeRight.jpg", CV_LOAD_IMAGE_COLOR);
选择ROI(在OpenCV 2.4.6中,我只能使用这种方式来设置ROI,而旧的库有cvSetImageROI()和cvResetImageROI(),我认为更简单):
Mat roi(img, Rect(Point(205, 72), Point(419,285)));
使用 cvtColor 改变图像的颜色空间:
cvtColor(roi, roi, CV_BGR2GRAY);
应用阈值:
threshold(roi, roi, 150, 255, THRESH_BINARY);
然后我使用克隆图像进行findContours操作,因为findContours会修改在函数中传递的图像,然后我将ROI更改回BGR颜色空间:
cvtColor(roi, roi, CV_GRAY2BGR);
在ROI中绘制所有找到的椭圆。
当我展示ROI时,可以看到一切都100%正常,但是我期望当我展示原始图像时,它将是带有阈值和内部绘图的原始图像与ROI,但实际上我只得到了原始图像本身,好像什么也没有改变。我认为这是因为cvtColor正在复制ROI,所以它不再“指向”img。
如何以最佳方式(或建议方式)进行相同的处理,并在原始图像中放置ROI,显示算法的进度?