You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 00:15:02