【问题标题】:Opencv: Selecting pixel with mouseOpencv:用鼠标选择像素
【发布时间】:2013-11-29 14:19:15
【问题描述】:

我正在使用cv2.setMouseCallback 函数来选择窗口中显示的图像的像素。 回调函数返回一个 x 和 y 整数,表示图像中像素的位置,但注意它的行为,在我看来,它不会返回您结束的像素,而是假想中一个点的四舍五入值轴。

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

好的。我知道在真实图像中错误是微不足道的,但这是一个错误吗?

   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 像素。如果您想更近距离地查看像素并检查行为,请将屏幕分辨率降低到可能的最低值。
  • 嗯,我明白,这个正方形中的每一个都是很多图片,但无论如何它并没有显示真正的像素数,这将是一个更大的数字。我只是想指出,至少在缩放图像时它不能完全正确地工作。
  • 实际上,在不调整大小的情况下检查行为的最佳方法是直到左侧或底部图像边框。例如,在 1000 像素宽度图像的最后一个左侧像素中,x 应该是 999。而不是说 1000,所以它实际上是一个错误......

标签: opencv


【解决方案1】:

该错误应该在未来的版本中修复。

http://code.opencv.org/issues/3409如果有兴趣。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多