我正在从事一个涉及从高分辨率图像中选择 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
,如果我拖动鼠标,我可以看到原始图像坐标,即使图像已调整大小以适合屏幕。
如果有人可以在这个问题上帮助我,我将不胜感激。