OpenCV 学习笔记

OpenCV 学习笔记

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

先安装包

bash 复制代码
pip install opencv-python

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

python 复制代码
import cv2

# 1. 基础IO:打开视频/相机
# cap = cv2.VideoCapture(0)   # 0=本地摄像头
cap = cv2.VideoCapture("test.mp4") # 读取视频文件;仿真虚拟帧就替换成拿到的画面

frame_count = 0
while cap.isOpened():
    ret, frame = cap.read() # ret是否读到画面,frame是图像数组(BGR格式!OpenCV默认BGR)
    if not ret:
        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.86
    x1,y1,x2,y2 = 120,80,220,180
    cv2.rectangle(blur, (x1,y1), (x2,y2), (0,255,0), 2) # 绿色框,线宽2
    cv2.putText(blur, "Target 0.86", (x1, y1-10),
                cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0,255,0), 2)

    # ===== 可选:保存截图 =====
    if frame_count % 30 == 0: # 每30帧存一张
        cv2.imwrite(f"result_{frame_count}.jpg", blur)

    # 显示画面
    cv2.imshow("Detection Window", blur)

    # waitKey:等待按键,27=ESC键退出
    key = cv2.waitKey(1) & 0xFF
    if key == 27:
        break

    frame_count +=1

# 释放资源,关闭窗口(必须写!)
cap.release()
cv2.destroyAllWindows()

逐个API说明

✅ 基础IO

  1. cv2.VideoCapture(source)

    • source填视频路径 / 摄像头编号;后续对接仿真虚拟相机帧时,这里会替换成接收ThreeJS渲染出的图像数组,不再读本地视频文件
    • .read() 循环取一帧图像,返回(ret,frame)
  2. cv2.imread("xxx.jpg"):读取图片,返回BGR图像数组

    python 复制代码
    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) 图像旋转矩阵
python 复制代码
# 示例:图片中心,旋转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
相关推荐
咯哦哦哦哦3 小时前
opencv复现 Halcon 双相机拼接
人工智能·数码相机·opencv
磁场转动100万匹4 小时前
Hive 学习第一天:搞懂它是什么,并搭好可用的环境
hive·hadoop·学习
dadaobusi4 小时前
RDMA最新进展
学习
我命由我123454 小时前
金融租赁极简理解
经验分享·学习·职场和发展·金融·求职招聘·职场发展·学习方法
彦4 小时前
C和C++笔记
c语言·c++·笔记
辣知4 小时前
辣知·化智75 道德经带给现代人的智慧
学习
Answer1st5 小时前
【嵌入式模块】SPI通信模块
笔记
小黄人软件5 小时前
aipy 智能体学习2:源码运行执行轨径主干
学习
JWASX5 小时前
Java 转 go 学习 - dubbo-go(1)
学习·golang