news 2026/8/29 8:04:08

Opencv 学习笔记:像素亮暗交界点检测 + 鼠标交互操作

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Opencv 学习笔记:像素亮暗交界点检测 + 鼠标交互操作

在图像分析中,检测像素亮暗交界点(黑白边缘)、实现鼠标交互标注是基础实用技能。本文整合 “像素亮暗交界点定位” 和 “鼠标交互绘图” 两大功能,新手可快速掌握核心逻辑并直接复用。

核心代码实现

import cv2 as cv import numpy as np # ===================== 功能1:检测像素亮暗交界点 ===================== def detect_bright_dark_edge(): # 1. 读取图像并校验 src = cv.imread("./image/1.bmp") if src is None: print("图像读取失败,请检查路径!") return src_gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY) # 2. 二值化:分离亮暗区域(阈值150可按需调整) ret, binary = cv.threshold(src_gray, 150, 255, cv.THRESH_BINARY) # 3. 检测指定行的亮暗交界点(y=100行,x范围200~500) check_row = 100 # 待检测行坐标 x_start, x_end = 200, 500 # 待检测列范围 # 绘制检测基准线(绿色,便于定位) cv.line(src, (x_start, check_row), (x_end, check_row), (0, 255, 0), 2) # 遍历列范围,检测亮暗交界 for x in range(x_start, x_end): # 避免列索引越界(核心避坑点) if x + 1 >= src_gray.shape[1]: break # 获取当前像素和右侧像素值 pix_current = binary[check_row, x] pix_next = binary[check_row, x+1] pix_diff = pix_current - pix_next # 检测到白→黑交界点,用蓝色实心圆标注 if pix_diff == 255: cv.circle(src, (x, check_row), 5, (255, 0, 0), -1) print(f"亮暗交界点:({x}, {check_row})") # 显示检测结果 cv.namedWindow('edge_detect', cv.WINDOW_NORMAL) cv.resizeWindow('edge_detect', 600, 600) cv.imshow('edge_detect', src) return src # ===================== 功能2:鼠标交互绘图 ===================== def mouse_interaction_demo(img): # 全局变量存储鼠标按下的初始坐标 global x1, y1 x1, y1 = -1, -1 # 鼠标回调函数:处理左键按下/拖拽/松开事件 def on_mouse(event, x, y, flags, param): global x1, y1 if event == cv.EVENT_LBUTTONDOWN: # 左键按下,记录初始坐标 x1, y1 = x, y print(f"左键点击:({x1}, {y1})") elif event == cv.EVENT_MOUSEMOVE and flags == cv.EVENT_FLAG_LBUTTON: # 左键拖拽(实时打印状态) print(f"左键拖拽:当前({x}, {y})") elif event == cv.EVENT_LBUTTONUP: # 左键松开,绘制直线 print(f"鼠标松开:终点({x}, {y})") cv.line(img, (x1, y1), (x, y), (255, 0, 0), 2) # 绑定鼠标回调并显示 cv.namedWindow('mouse_demo', cv.WINDOW_NORMAL) cv.resizeWindow('mouse_demo', 600, 600) cv.setMouseCallback('mouse_demo', on_mouse) # 按q退出循环 while True: cv.imshow('mouse_demo', img) if cv.waitKeyEx(1) == ord('q'): break # ===================== 主程序执行 ===================== if __name__ == "__main__": edge_img = detect_bright_dark_edge() if edge_img is not None: mouse_interaction_demo(edge_img) cv.destroyAllWindows()

关键知识点解析

1. 亮暗交界点检测核心

表格

步骤核心逻辑避坑要点
二值化cv.threshold()将图像转为黑白,简化交界判断阈值需适配图像亮度,暗图调低、亮图调高
差值计算pix_current - pix_next255 = 白→黑交界,-255 = 黑→白交界
越界防护x+1 >= src_gray.shape[1]避免索引超出图像宽度导致报错
可视化cv.circle(..., -1)线宽 - 1 填充圆形,交界点更醒目

2. 鼠标交互核心

表格

事件类型触发条件核心操作
EVENT_LBUTTONDOWN左键按下记录初始坐标x1, y1
EVENT_MOUSEMOVE+EVENT_FLAG_LBUTTON左键拖拽实时获取拖拽坐标
EVENT_LBUTTONUP左键松开绘制从初始点到终点的直线

3. 原代码核心修复

  • 索引越界:新增x+1 >= src_gray.shape[1]判断,解决像素访问报错;
  • 鼠标事件错误:将flags == cv.EVENT_LBUTTONDOWN修正为cv.EVENT_FLAG_LBUTTON(左键按住标志位);
  • 全局变量:规范定义x1, y1全局变量,保证鼠标坐标跨事件传递;
  • 圆形填充:交界点标注改为实心圆(线宽 - 1),视觉效果更清晰。

总结

  1. 亮暗交界点检测的核心是二值化后计算相邻像素差值,需重点防护像素索引越界;
  2. 鼠标交互的关键是回调函数 + 全局变量,区分按下、拖拽、松开三类事件;
  3. 两个功能可结合使用,先自动检测边缘,再通过鼠标交互标注 / 修正结果,适配边缘定位、缺陷标注等场景。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/16 6:06:38

计算机毕业设计springboot在线农产品购物网站 基于Spring Boot的生鲜农产品电商平台设计与实现 乡村特产在线销售系统开发——采用Spring Boot框架

计算机毕业设计springboot在线农产品购物网站lzggid8e (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着信息技术的飞速发展和互联网经济的蓬勃兴起,传统农产品销售…

作者头像 李华
网站建设 2026/8/16 6:06:25

两个bm|分块

C 分块算法模板&#xff0c;适合区间修改、区间查询类问题&#xff08;如区间加、区间和&#xff09;&#xff0c;直接就能用#include <iostream>#include <vector>#include <cmath>using namespace std;const int MAXN 1e5 5;int a[MAXN]; // 原数组long …

作者头像 李华
网站建设 2026/8/16 6:06:25

在web页面中,JAVA如何解决大文件上传的难题?

大文件传输解决方案建议书 一、需求分析与技术挑战 作为福建IT行业软件公司项目负责人&#xff0c;针对贵司提出的大文件传输需求&#xff0c;我进行了全面分析&#xff0c;发现以下几个核心挑战&#xff1a; 超大文件传输稳定性&#xff1a;单文件100G的传输及断点续传文件…

作者头像 李华
网站建设 2026/8/16 6:05:00

JAVA上传目录结构到网页有哪些技巧?

大文件传输系统建设方案 一、需求分析与技术选型 作为项目负责人&#xff0c;针对公司核心需求&#xff0c;需解决以下关键技术挑战&#xff1a; 跨平台兼容性&#xff1a;需兼容IE8等老旧浏览器及Windows 7环境高并发稳定性&#xff1a;避免传统打包下载导致的内存溢出问题…

作者头像 李华
网站建设 2026/8/29 7:08:05

JSP页面如何处理大附件上传问题?

大文件传输系统技术方案 一、技术选型与架构设计 作为项目负责人&#xff0c;我主导设计了基于现有技术栈的混合架构方案&#xff1a; 前端架构&#xff1a;采用Vue2 CLI框架兼容模式&#xff0c;通过Webpack配置同时支持Vue2/Vue3组件&#xff0c;通过条件编译实现React项目…

作者头像 李华
网站建设 2026/8/22 16:00:04

亲测好用 8个AI论文网站:研究生毕业论文写作与格式规范全测评

在当前学术研究日益数字化的背景下&#xff0c;研究生群体面临着论文写作、文献检索、格式规范等多重挑战。尤其是在AI技术广泛应用的今天&#xff0c;如何选择一款高效、专业且符合学术规范的写作工具&#xff0c;成为许多学生关注的焦点。为了帮助广大研究生更科学地挑选适合…

作者头像 李华