我正在开展一个涉及从高分辨率图像中选择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)
。
Opencv如何在调整大小后正确计算原始图像坐标?
当我使用imshow
打开相同的图像时,我观察到它,如果我拖动鼠标,我可以看到原始图像坐标,即使图像已经调整大小以适应屏幕。
如果有人可以在这个问题上帮助我,我会很感激。