使用Qt和Opencv为高分辨率图像选择ROI

时间:2017-07-21 18:23:28

标签: opencv image-processing pyqt roi qmouseevent

我正在开展一个涉及从高分辨率图像中选择ROI的项目(更像是5187x3268)。现在我在OpenCV中使用findContours来检测圆形对象(因为霍乱圆对于高分辨率图像来说有点慢)。问题是由于对象上的纹理量很大,findContours有时会出错。

我现在正在做的是向用户显示Qt窗口中findContours检测到的内容,并确定它是否已正确检测到。如果检测到正确,用户将按Ok按钮,否则将按No, Let me select按钮。

当用户按下No, Let me select时,应用程序将开始捕获mouseEvent并使用QRubberBand显示一个矩形。我正在使用QLabel来显示图像,因为我的屏幕尺寸为1920x1080,我必须将图像调整为某种分辨率(比方说1537x1280,这样它就为按钮留下了一些空间)。 我正在使用opencv resize来调整图像大小。

width = myImageDisplayer.width()
height = myImageDisplayer.height()

resizedImage = cv2.resize(myImage,(height,width),cv2.INTER_LINEAR)

我正在使用比率来计算尺寸减小(

xReduction = originalImage.rows()/resizedImage.rows()
yReduction = originalImage.cols()/resizedImage.cols()

,并将event.pos()坐标与比率相乘,以获得原始图像中的正确坐标。

xrealCoordinates = event.pos().x()*xReduction
yrealCoordinates = event.pos().y()*yReduction

由于坐标是浮点数,我将它们四舍五入。问题在于舍入浮点值,因为我在转换中失去了精度。

精确度非常重要,因为我需要在从图像中选择ROI后重新计算principal coordinates(calculated by calibrating the stereo setup)

enter image description here

Opencv如何在调整大小后正确计算原始图像坐标? 当我使用imshow打开相同的图像时,我观察到它,如果我拖动鼠标,我可以看到原始图像坐标,即使图像已经调整大小以适应屏幕。

如果有人可以在这个问题上帮助我,我会很感激。

0 个答案:

没有答案