我们正在使用Python 3.6和OpenCV。
我们试图从呈现的图像中的两个点获得坐标(x,y)。
我们有setFrame
功能来显示如下图像:
def setFrame(self):
global video
num = self.frame_scrollBar.value()
self.video_frame.setScaledContents(True); #QLabel will resize itself to the size of pixmap/image and scroll-bar will get visible.
cvRGBImg = cv2.cvtColor(video[num-1], cv2.COLOR_BGR2RGB) #Convert opencv RGB image to QImage
qimg = QtGui.QImage(cvRGBImg.data,cvRGBImg.shape[1], cvRGBImg.shape[0], QtGui.QImage.Format_RGB888)
qpm = QtGui.QPixmap.fromImage(qimg)
self.video_frame.setPixmap(qpm)
另外,我们有getPos
函数来获取(x,y)坐标:
def getPos(self, event):
global setPoint
global coords
global video
if setPoint == True:
x = event.pos().x()
y = event.pos().y()
coords.append((x,y))
cv2.circle(video[int(self.frame_3.text())-1],(x,y),3,(0,0,255),-1)
self.setFrame()
if len(coords)==2:
setPoint = False
print (coords[0])
print (coords[1])
self.message()
问题是当我们点击显示图像上的某个点时,坐标不正确。例如。我们点击一个点,我们看到此点上方的圆圈,(x,y)与我们点击的点不对应。
我们也尝试使用pygame
获取坐标,但仍然没有运气。
我们必须进行某种转型吗?如果我们不使用self.video_frame.setScaledContents(True)
,则会在QPixmap
中显示所呈现的图像。
你能帮帮我们吗?
答案 0 :(得分:0)
我们找到了解决方案。
问题是QLabel
尺寸与呈现的图像尺寸不对应。
QLabel
尺寸为491x371,图像尺寸为512x512。所以我们必须转换点击的坐标,如:
x = event.pos().x()
x = int(x*(512/491)) # coordinates/pixels must be integers
y = event.pos().y()
y = int(y*(512/371))
现在命令cv2.circle(video[int(self.frame_3.text())-1],(x,y),3,(0,0,255),-1)
将圆圈设计在正确的位置。