【发布时间】: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