news 2026/10/10 6:16:44

OpenCV 学习笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenCV 学习笔记

OpenCV 学习笔记

    • 逐个API说明
      • ✅ 基础IO
      • ✅ 图像预处理
      • ✅ 绘图函数
      • ✅ 可选API
    • 常见坑

先安装包
pipinstallopencv-python

下面代码依次演示:读视频帧、预处理、高斯模糊、画框、写文字、保存截图、窗口释放。

importcv2# 1. 基础IO:打开视频/相机# cap = cv2.VideoCapture(0) # 0=本地摄像头cap=cv2.VideoCapture("test.mp4")# 读取视频文件;仿真虚拟帧就替换成拿到的画面frame_count=0whilecap.isOpened():ret,frame=cap.read()# ret是否读到画面,frame是图像数组(BGR格式!OpenCV默认BGR)ifnotret:break# ===== 图像预处理 =====gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)# BGR转灰度rgb_img=cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)# BGR转RGB(给YOLO用,YOLO输入是RGB)resized=cv2.resize(frame,(640,480))# 缩放,降低YOLO算力消耗blur=cv2.GaussianBlur(resized,(5,5),0)# 高斯滤波降噪,核(5,5)# ===== 绘图函数:画检测框+文字 =====# 假设检测框坐标 (x1,y1)左上角 (x2,y2)右下角,置信度0.86x1,y1,x2,y2=120,80,220,180cv2.rectangle(blur,(x1,y1),(x2,y2),(0,255,0),2)# 绿色框,线宽2cv2.putText(blur,"Target 0.86",(x1,y1-10),cv2.FONT_HERSHEY_SIMPLEX,0.6,(0,255,0),2)# ===== 可选:保存截图 =====ifframe_count%30==0:# 每30帧存一张cv2.imwrite(f"result_{frame_count}.jpg",blur)# 显示画面cv2.imshow("Detection Window",blur)# waitKey:等待按键,27=ESC键退出key=cv2.waitKey(1)&0xFFifkey==27:breakframe_count+=1# 释放资源,关闭窗口(必须写!)cap.release()cv2.destroyAllWindows()

逐个API说明

✅ 基础IO

  1. cv2.VideoCapture(source)
    • source填视频路径 / 摄像头编号;后续对接仿真虚拟相机帧时,这里会替换成接收ThreeJS渲染出的图像数组,不再读本地视频文件
    • .read()循环取一帧图像,返回(ret,frame)
  2. cv2.imread("xxx.jpg"):读取图片,返回BGR图像数组
    img=cv2.imread("test.jpg")
  3. cv2.imshow("窗口名", img):弹出窗口展示图片
  4. cv2.waitKey(delay):等待键盘输入,单位ms;&0xFF适配不同系统,27对应ESC
  5. cv2.destroyAllWindows():销毁所有OpenCV窗口,防止后台残留

✅ 图像预处理

  1. cv2.cvtColor(img, 转换码)
    • cv2.COLOR_BGR2GRAY:转灰度图
    • cv2.COLOR_BGR2RGB:BGR→RGB,YOLO模型需要RGB输入

    ⚠️重点坑:OpenCV读出来默认BGR,不是RGB!很多人YOLO检测错乱就是这个原因

  2. cv2.resize(img, (width,height))缩放图像,降低推理耗时
  3. cv2.GaussianBlur(img, (ksize_x,ksize_y), sigma)
    • (5,5)是卷积核大小,必须是奇数;sigma是高斯标准差,0自动计算
    • 作用:平滑降噪,减少画面噪点带来的误检测

✅ 绘图函数

  1. cv2.rectangle(img, pt1, pt2, color, thickness)
    • pt1左上角,pt2右下角;颜色是BGR三元组(B,G,R),比如绿色(0,255,0)
  2. cv2.putText(img, text, 文字左上角坐标, 字体, 字号缩放, 颜色, 线宽)
    • 用来写:目标类别、置信度、无人机编号UAV1/UGV2,答辩截图很好看

✅ 可选API

  1. cv2.imwrite("save.jpg", img)把图片存硬盘,保存检测结果图放进论文
  2. cv2.getRotationMatrix2D(center, angle, scale)图像旋转矩阵
# 示例:图片中心,旋转30度,缩放1倍h,w=frame.shape[:2]rot_mat=cv2.getRotationMatrix2D((w//2,h//2),30,1)rot_img=cv2.warpAffine(frame,rot_mat,(w,h))

常见坑

  1. OpenCV图像通道BGR,YOLO需要RGB,忘记转换会检测异常
  2. 窗口用完不写release+destroyAllWindows,程序卡死
  3. cv2.VideoCapture读仿真帧的时候,如果是内存里的图片数组,不需要VideoCapture,直接用图像数组送入YOLO
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/10 6:16:37

[GESP202603 六级] 完全二叉树

视频讲解:[GESP202603 六级] 完全二叉树-信息学奥赛GESP等级考试真题解析 一、原题 题目描述 给定一棵包含 n 个结点的有根二叉树,结点依次以 1,2,…,n 编号,根结点编号为 1。 对于结点 i,其左儿子的编号记为 li​&#xff0c…

作者头像 李华
网站建设 2026/10/10 6:16:37

2026 版高中英语试题调研热点题型专项阅读理解备考资料

这套资料专门针对高考英语阅读理解板块打造,包含阅读原题训练与配套深度解析,覆盖常规阅读题型以及7选5题型,针对性突破阅读难点,掌握解题思路,提升阅读答题正确率。 📥资料获取方式 【2026版高中《试题调…

作者头像 李华
网站建设 2026/10/10 6:15:46

page_alloc fallbacks[][]

伙伴系统中迁移类型降级(fallback)的优先级表。当某种迁移类型的空闲链表耗尽时,分配器按这个表尝试从其他类型"偷"页。一、背景:为什么需要 fallback?迁移类型与反碎片空闲页按迁移类型分组(MIG…

作者头像 李华
网站建设 2026/10/10 6:14:37

从目的到落地:motion-design-skill四级决策框架完整教程

从目的到落地:motion-design-skill四级决策框架完整教程 【免费下载链接】motion-design-skill Universal motion design principles for AI agents — timing, easing, choreography, and Disney animation principles adapted for UI 项目地址: https://gitcode…

作者头像 李华
网站建设 2026/10/10 6:11:35

从OpenGL到现代图形API:渲染思维与架构迁移实战

1. 为什么“会写OpenGL”不等于“懂现代渲染”很多做了五六年OpenGL的朋友,第一次接触现代图形API时都会有一种强烈的挫败感:明明以前几十行就能画出一个三角形,现在光是初始化就要写几百行;以前改一个状态直接调函数就行&#xf…

作者头像 李华