Nous utilisons Python 3.6 et OpenCV.Python/OpenCV: event.pos() ne correspond pas aux valeurs correctes cliquées
Nous essayons d'obtenir les coordonnées (x, y) à partir de deux points d'une image présentée.
Nous avons fonction setFrame
pour afficher l'image comme ci-dessous:
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)
De plus, nous avons la fonction getPos
afin d'obtenir le (x, y) Coordonnées:
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()
Le problème est que lorsque nous cliquons sur un point de l'image présentée, les coordonnées ne sont pas correctes. Par exemple. On clique sur un point a on voit le cercle au dessus de ce point et les (x, y) ne correspondent pas au point sur lequel on a cliqué.
Nous avons également essayé d'obtenir les coordonnées en utilisant pygame
mais toujours pas de chance.
Devons-nous effectuer une sorte de transformation? Dans le cas où nous n'utilisons pas self.video_frame.setScaledContents(True)
alors l'image présentée est déplacée dans le QPixmap
. Pouvez-vous s'il vous plaît nous aider?