Opencv:使用鼠标选择像素

Opencv:使用鼠标选择像素,opencv,Opencv,我正在使用该函数选择窗口中显示的图像的像素。 回调函数返回一个代表图像中像素位置的x和y整数,但注意它的行为,在我看来,它似乎不返回你所在的像素,而是返回虚轴上点的舍入值 如果您查看前两幅图像,在这两幅图像中,鼠标都位于像素0,0上,但如果您靠近其他像素,结果会有所不同 嗯。我知道在真实图像中,错误是无关紧要的,但这是一个bug吗 cv2.namedWindow('image',cv2.WINDOW_NORMAL) # Can be resized cv2.resizeWindow

我正在使用该函数选择窗口中显示的图像的像素。 回调函数返回一个代表图像中像素位置的x和y整数,但注意它的行为,在我看来,它似乎不返回你所在的像素,而是返回虚轴上点的舍入值

如果您查看前两幅图像,在这两幅图像中,鼠标都位于像素0,0上,但如果您靠近其他像素,结果会有所不同

嗯。我知道在真实图像中,错误是无关紧要的,但这是一个bug吗

   cv2.namedWindow('image',cv2.WINDOW_NORMAL) # Can be resized
   cv2.resizeWindow('image', self.w, self.h) #Reasonable size window
   cv2.setMouseCallback('image',self.mouse_callback) #Mouse callback
   while(not self.finished):
      cv2.imshow('image',self.img)
      k = cv2.waitKey(4) & 0xFF
      if k == 27:
         breakim
   cv2.destroyAllWindows()


   # mouse callback function
   def mouse_callback(self,event,x,y,flags,param):
      if event == cv2.EVENT_LBUTTONDOWN:
         print x, y

这个错误应该在以后的版本中修复


如果感兴趣。

是否将原始20x20图像调整为500x500(放大)大小?是的。你认为这会导致一些故障吗?当然。。这些大正方形不仅仅是一个像素,如果你调整图像大小,它们包含(500/25)x(500/25)=625个像素。如果你想近距离观察像素并检查其行为,请尽可能将屏幕分辨率降低到最低。嗯,我明白,很明显,这个正方形中的每一个都有很多图片,但无论如何,它并没有显示实际的像素数,而实际的像素数可能要大得多。我只是想指出,至少在缩放图像时,它不能严格正确地工作。实际上,在不调整大小的情况下检查行为的最佳方法是一直到图像的左侧或底部边界。例如,在1000px宽图像的最后一个左像素中,x应为999。相反,它说的是1000,所以它实际上是一个bug。。。