0

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

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

当用户按下No, Let me select时,应用程序将开始捕获mouseEvent并使用QRubberBand. 我QLabel用来显示图像,因为我的屏幕尺寸是1920x1080,我必须将图像调整为某个分辨率(比如说 1537x1280,以便为按钮留出一些空间)。我正在使用 opencvresize来调整图像大小。

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

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

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

在此处输入图像描述

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

如果有人可以在这个问题上帮助我,我将不胜感激。

4

0 回答 0