Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Qt和Opencv为高分辨率图像选择ROI_Opencv_Image Processing_Pyqt_Roi_Qmouseevent - Fatal编程技术网

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

使用Qt和Opencv为高分辨率图像选择ROI,opencv,image-processing,pyqt,roi,qmouseevent,Opencv,Image Processing,Pyqt,Roi,Qmouseevent,我正在从事一个项目,该项目涉及从高分辨率图像中选择ROI(更像是5187x3268)。现在,我在OpenCV中使用findContours来检测圆形对象(因为hough圆对于高分辨率图像来说有点慢)。问题在于,由于对象上有大量纹理,findContours有时会出错 我现在要做的是,向用户展示findContours在Qt窗口中检测到的内容,并确定它是否检测正确。如果检测正确,用户将按下Ok按钮,如果没有No,让我选择将按下的按钮 当用户按下No,让我选择,应用程序将开始捕获mouseEvent

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

我现在要做的是,向用户展示
findContours
在Qt窗口中检测到的内容,并确定它是否检测正确。如果检测正确,用户将按下
Ok
按钮,如果没有
No,让我选择将按下的
按钮

当用户按下
No,让我选择
,应用程序将开始捕获
mouseEvent
,并使用
QRubberBand
显示一个矩形。我正在使用
QLabel
来显示图像,因为我的屏幕大小是
1920x1080
,所以我必须将图像的大小调整到一定的分辨率(比如1537x1280,以便为按钮留出一些空间)。 我正在使用opencv
resize
调整图像大小

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

resizedImage = cv2.resize(myImage,(height,width),cv2.INTER_LINEAR)
我用比率来计算像这样的尺寸缩减(

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

xrealCoordinates = event.pos().x()*xReduction
yrealCoordinates = event.pos().y()*yReduction
因为坐标是浮点的,所以我将它们舍入。问题在于舍入浮点值,因为我在转换过程中失去了精度

精度很重要,因为在从图像中选择ROI后,我需要重新计算
主坐标(通过校准立体设置计算)

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


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

你提到的四舍五入不是问题,而且计算是合理的。问题是你在按比例工作,但只能测量光标位置到一个像素。如果你将图像的每个维度缩放到原始的1/4,那么每个4x4组原稿中的f像素变成结果中的单个像素。现在,如果单击此像素,您知道它将落在原稿的4x4区域中的某个位置。为了让用户精确选择一个像素,我将添加对滚动、多个缩放级别和一些按钮(或其他合适的控件)的支持用于精确调整选择位置和大小。是的,但即使我使用opencv的
selectRoi
进行了测试。即使它将图像大小调整到特定尺寸,它也会重新计算原始图像坐标,根据我的经验,它们与像素精确。我想知道opencv如何获得正确的像素坐标|但是,即使你可以获得亚像素精度的鼠标屏幕位置,你仍然看不到你到底选择了什么…我实际上不必看到我到底选择了什么,如果我可以覆盖主题周围的某个区域,我会很高兴。因为我必须在
ROI
计算后重新计算
主坐标图像,选择必须精确,否则计算会有错误。现在我想通过将最后两个数字舍入为零来作弊,例如“如果原始图像中计算的图像坐标是1573,那么我将舍入为1500”。希望它能起作用。
xrealCoordinates = event.pos().x()*xReduction
yrealCoordinates = event.pos().y()*yReduction