未触发opencv鼠标回调

7uhlpewt  于 2022-11-30  发布在  其他
关注(0)|答案(2)|浏览(150)

看看这个函数:

def showImage(im):
    def printColor(event, x, y, flag, params):
        if event == cv2.EVENT_LBUTTONDOWN:
            print(im[x,y])
            sys.exit(1)

    tag = "image"
    cv2.setMouseCallback(tag, printColor)
    cv2.imshow(tag, im)
    while True:
        if 'q' == chr(cv2.waitKey() & 255):
            cv2.destroyAllWindows()
            break

它应该显示一个图像,并打印鼠标点击位置的像素。但由于某种原因,回调没有被触发。我该如何让这段代码工作呢?

e3bfsja2

e3bfsja21#

要使setMouseCallback正常工作,您需要首先创建window对象。
这可以通过在设置鼠标回调之前调用imshow来实现,也可以通过使用cv2.namedWindow()创建回调来实现

g2ieeal7

g2ieeal72#

@您可以尝试以下代码

import cv2

def function1(event, x, y, flags, param):

    if event==cv2.EVENT_LBUTTONDOWN:

        print(input_img[x, y])

input_img = cv2.imread(r'D:\personal 
data\316817146_6028126817205901_1035125390140549057_n.jpg') # get image
#named window
cv2.namedWindow('new window')
#show the image in the window
cv2.imshow('new window', input_img)

#call setMouseCallback()
cv2.setMouseCallback('new window', function1)

while True:

    if cv2.waitKey(1) and 0xFF==ord('q'):

        break

cv2.detroyAllWindows()

相关问题