OpenCV-Python如何实现保存两个GBR像素值后自动结束程序
实现方案
你可以通过增加采集计数、存储变量和退出标志的方式实现需求,修改后的完整代码如下:
import cv2 import numpy as np # 新增全局变量:存储选中的BGR值、退出标志 selected_bgr = [] exit_flag = False def mouse(event,x,y,flags,param): global selected_bgr, exit_flag if event == cv2.EVENT_LBUTTONDOWN: colorsb = image[y,x,0] colorsg = image[y,x,1] colorsr = image[y,x,2] colors = image[y,x] print("Red: ",colorsr) print("Green: ",colorsg) print("Blue: ",colorsb) print("BGR : ",colors) print("Coordinates of pixel: X: ",x,"Y: ",y) # 存储当前BGR值 selected_bgr.append(colors) # 判断是否存满2个 if len(selected_bgr) == 2: print("已采集完成,2个BGR像素值分别为:", selected_bgr) exit_flag = True image = cv2.imread("x.jpg") cv2.namedWindow("Image") cv2.setMouseCallback("Image", mouse) while(1): cv2.imshow("Image",image) # 检测ESC手动退出或采集完成自动退出 if cv2.waitKey(1) & 0xFF == 27 or exit_flag: break cv2.destroyAllWindows()
修改说明
- 新增两个全局变量:
selected_bgr用于存储两次点击采集的BGR像素值,exit_flag用于控制主循环自动退出 - 鼠标回调函数中每次左键点击完成打印后,将当前BGR值存入
selected_bgr,当列表长度达到2时自动设置退出标志 - 主循环中新增对
exit_flag的判断,采集完成后无需按ESC即可自动退出程序、销毁窗口 - 优化修正了原代码中打印的
BRG笔误,OpenCV读取图片的像素通道默认顺序为BGR - 如果你不想使用全局变量,也可以将存储列表和退出标志封装为字典/列表作为
param参数传入setMouseCallback,效果完全一致
测试图片

内容的提问来源于stack exchange,提问作者Lynoix
相关产品推荐
相关产品推荐

