版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/github_39611196/article/details/84939317
本文主要实现通过cv2只能够的鼠标事件实现图片中的颜色检测。
下面是示例代码:
import cv2
import glob
import numpy as np
# 鼠标回调函数
def showPixelValue(event, x, y, flags, param):
global img, combinedResult, placeholder
if event == cv2.EVENT_MOUSEMOVE:
# 获取鼠标所在(x,y)位置的像素值
bgr = img[y, x]
# 将BGR线束转换为其他颜色格式
ycb = cv2.cvtColor(np.uint8([[bgr]]), cv2.COLOR_BGR2YCrCb)[0][0]
lab = cv2.cvtColor(np.uint8([[bgr]]), cv2.COLOR_BGR2Lab)[0][0]
hsv = cv2.cvtColor(np.uint8([[bgr]]), cv2.COLOR_BGR2HSV)[0][0]
# 创建一个空占位符以显示值
placeholder = np.zeros((img.shape[0], 400, 3),dtype=np.uint8)
# 使用颜色空间的值填充占位符
cv2.putText(placeholder, "BGR {}".format(bgr), (20, 70), cv2.FONT_HERSHEY_COMPLEX, .9, (255, 255, 255), 1, cv2.LINE_AA)
cv2.putText(placeholder, "HSV {}".format(hsv), (20, 140), cv2.FONT_HERSHEY_COMPLEX, .9, (255,255,255), 1, cv2.LINE_AA)
cv2.putText(placeholder, "YCrCb {}".format(ycb), (20, 210), cv2.FONT_HERSHEY_COMPLEX, .9, (255,255,255), 1, cv2.LINE_AA)
cv2.putText(placeholder, "LAB {}".format(lab), (20, 280), cv2.FONT_HERSHEY_COMPLEX, .9, (255,255,255), 1, cv2.LINE_AA)
# 将两个结果组合在一个图像中并排显示
combinedResult = np.hstack([img,placeholder])
cv2.imshow('PRESS P for Previous, N for Next Image',combinedResult)
# 导入图片并绑定鼠标回调函数
global img
files = glob.glob('images/rub*.jpg')
files.sort()
img = cv2.imread(files[0])
img = cv2.resize(img, (400, 400))
cv2.imshow("PRESS P for Previous, N for Next Image", img)
# 创建一个空窗口
cv2.namedWindow('PRESS P for Previous, N for Next Image')
# 设置鼠标回调函数
cv2.setMouseCallback('PRESS P for Previous, N for Next Image', showPixelValue)
i = 0
while(1):
k = cv2.waitKey(1) & 0xFF
# 在文件夹下检查下一张图片
if k == ord('n'):
i += 1
img = cv2.imread(files[i%len(files)])
img = cv2.resize(img,(400,400))
cv2.imshow('PRESS P for Previous, N for Next Image',img)
# 在文件夹下检查前一张图片
elif k == ord('p'):
i -= 1
img = cv2.imread(files[i%len(files)])
img = cv2.resize(img,(400,400))
cv2.imshow('PRESS P for Previous, N for Next Image',img)
elif k == 27:
cv2.destroyAllWindows()
break
结果示例:
未放置鼠标之前:
放置鼠标之后: