如何在JupyterLab中使用OpenCV实现图像显示、矩形绘制及垂直移动
OpenCV窗口图像显示与可垂直移动矩形实现(适配JupyterLab)
环境初始化与依赖导入
首先导入OpenCV核心库,完成基础参数配置:
import cv2 import numpy as np
- 本地图像读取校验:读入待显示的测试图像,增加非空判断避免路径错误导致的程序崩溃
# 替换为你本地存储的图像路径 img = cv2.imread("test.jpg") if img is None: raise ValueError("图像读取失败,请核对文件路径与文件名")
- 移动矩形参数初始化:定义矩形的位置、尺寸、移动速度等基础属性
# 矩形左上角初始坐标 rect_x, rect_y = 200, 100 # 矩形宽度、高度 rect_w, rect_h = 120, 80 # 垂直方向移动步长 move_step = 5 # 矩形颜色(OpenCV默认采用BGR格式,此处为纯绿色) rect_color = (0, 255, 0) # 矩形边线宽度 line_thickness = 2 # 获取图像尺寸,用于后续的移动边界判断 img_h, img_w = img.shape[:2]
核心功能实现逻辑
三个需求全部通过实时刷新的循环逻辑实现,保证窗口交互流畅:
- 图像窗口创建与实时显示
调用OpenCV创建支持自适应调整大小的窗口,避免JupyterLab环境下窗口卡死、画面不刷新的问题 - 动态矩形绘制
每次循环先拷贝原始图像作为临时绘制画布,避免矩形反复绘制产生的残留痕迹 - 垂直方向移动交互
捕获键盘按键输入,根据按键指令调整矩形的纵向坐标,同时增加边界判断逻辑,防止矩形移出图像显示范围
完整可运行代码片段:
# 创建可自由调整大小的交互窗口 cv2.namedWindow("OpenCV Demo", cv2.WINDOW_NORMAL) while True: # 基于原始图像生成当前帧的绘制画布 canvas = img.copy() # 在画布上绘制矩形 cv2.rectangle( img=canvas, pt1=(rect_x, rect_y), pt2=(rect_x + rect_w, rect_y + rect_h), color=rect_color, thickness=line_thickness ) # 将当前帧显示到窗口中 cv2.imshow("OpenCV Demo", canvas) # 捕获键盘输入,设置1ms延时保证窗口响应流畅 key = cv2.waitKey(1) & 0xFF # 按q键或Esc键退出程序 if key == ord('q') or key == 27: break # 按下方向键:矩形沿图像y轴正方向(向下)移动 if key == ord('s'): new_y = rect_y + move_step # 边界校验:矩形底部不超出图像下边界 if new_y + rect_h <= img_h: rect_y = new_y # 按上方向键:矩形沿图像y轴负方向(向上)移动 if key == ord('w'): new_y = rect_y - move_step # 边界校验:矩形顶部不超出图像上边界 if new_y >= 0: rect_y = new_y # 退出循环后销毁所有OpenCV弹出窗口,避免JupyterLab内核阻塞 cv2.destroyAllWindows()
新手操作提示
- OpenCV的图像坐标系原点位于画面左上角,y轴向下为正方向,调整移动坐标时需要匹配这个坐标系规则
- 禁止直接在原始读入的图像上反复绘制图形,必须使用
img.copy()生成临时画布,否则多次循环后矩形痕迹会永久叠加在原图上 - 在JupyterLab中运行该交互程序时,必须按程序定义的退出键关闭窗口,直接点窗口的关闭按钮会导致内核持续占用,需要手动重启内核才能继续操作
内容的提问来源于stack exchange,提问作者Riya
相关产品推荐
相关产品推荐

