树莓派 - OpenCV的基本操作教程 (超详细)

openCV

基本函数用法

1. 导入库

import cv2  
  • 作用:导入 OpenCV 库,用于摄像头捕获、图像处理(如颜色转换、边缘检测)等。
  • 注意:确保已通过pip install opencv-python安装库,且导入时库名是 cv2(历史命名,与 OpenCV 2.x 无关)。

2. 读取图像

img = cv2.imread("image.jpg")
  • 功能:从指定路径读取图像文件到内存。
  • 参数:
    • "image.jpg":图像文件的路径(支持格式:JPEG、PNG、BMP、TIFF 等)。
    • 可选参数:flags(未显式指定,默认为 cv2.IMREAD_COLOR,即加载 BGR 三通道彩色图像)。
  • 返回值:
    • img:一个 numpy.ndarray多维数组,形状为 (高度, 宽度, 3),表示 BGR 格式的像素数据。
    • 若文件不存在或格式不支持,返回 None
  • 常见问题:
    • 路径错误:若控制台报错 img is None,检查文件路径是否正确(建议使用绝对路径)。
    • 颜色异常:OpenCV 默认读取为 BGR 格式,其他工具(如 Matplotlib)显示时需转为 RGB。

3. 显示图像

cv2.imshow("Image", img)
  • 功能:创建一个窗口并显示图像。
  • 参数
    • "Image":窗口的名称(字符串类型,可自定义)。
    • img:要显示的图像数据(numpy 数组)。
  • 注意
    • 窗口大小自动适应图像尺寸。
    • 多个窗口需使用不同名称区分。
    • 必须与 cv2.waitKey() 配合使用,否则窗口会无响应。

4. 等待按键输入

cv2.waitKey(0)  
  • 功能:等待用户按下键盘任意键,期间保持窗口显示。
  • 参数
    • 0:等待时间(毫秒),0 表示无限等待,直到有按键按下。
    • 其他值:如 cv2.waitKey(25) 表示等待 25 毫秒后自动继续。
  • 返回值:按键的 ASCII 码值(无按键时返回 -1)。
  • 常见用法
    • 实时视频中常用 cv2.waitKey(1) 实现逐帧播放。
    • 按特定键退出:if cv2.waitKey(1) & 0xFF == ord('q'): break

5. 关闭所有窗口

cv2.destroyAllWindows()
  • 功能:关闭程序中所有由 cv2.imshow() 创建的窗口。
  • 注意
    • 若不调用此函数,窗口可能在程序结束后仍未关闭(取决于操作系统)。
    • 可单独关闭指定窗口:cv2.destroyWindow("Image")

6. 保存图像

cv2.imwrite("output.jpg", img)
  • 功能:将图像数据保存为文件。
  • 参数
    • "output.jpg":保存路径,格式由扩展名决定(如 .png.bmp)。
    • img:要保存的图像数据(numpy 数组)。
    • 可选参数:压缩参数(如 JPEG 质量):
      cv2.imwrite("output.jpg", img, [cv2.IMWRITE_JPEG_QUALITY, 90])  # 质量范围 0-100
      
  • 常见问题
    • 权限不足:若路径无写入权限会保存失败。
    • 数据范围:若 img 为浮点类型(如范围 0~1),需先转换为 uint8(0~255)。

7. 摄像头的基本用法

(1) VideoCapture
cap = cv2.VideoCapture(source, apiPreference=None)
  • 参数
    • source
      • 摄像头设备号:整数(如 0 表示默认摄像头)。
      • 视频文件路径:字符串(如 "video.mp4")。
      • 网络流地址:URL(如 "rtsp://192.168.1.1/live")。
    • apiPreference(可选):指定使用的后端 API(如 cv2.CAP_DSHOW 用于 Windows 摄像头)。
  • 返回值:一个 VideoCapture对象。
示例代码
# 打开默认摄像头
cap_cam = cv2.VideoCapture(0)

# 打开视频文件
cap_file = cv2.VideoCapture("input.mp4")

# 打开网络流
cap_stream = cv2.VideoCapture("rtsp://example.com/stream")
(2) cap.read()
  • 功能:读取下一帧。
  • 返回值
    • ret(布尔值):是否成功读取帧。
    • frame(numpy数组):当前帧的图像数据(BGR格式)。
(3) cap.isOpened()
  • 功能:检查摄像头是否成功打开。
  • 返回值:布尔值(True 表示已打开)。
(4) cap.release()
  • 功能:释放摄像头资源(必须显式调用,否则可能导致资源泄漏)。
(5) cap.get(propId)cap.set(propId, value)
  • 功能:获取或设置摄像头属性。
  • 常用属性
    • cv2.CAP_PROP_FRAME_WIDTH:帧宽度。
    • cv2.CAP_PROP_FRAME_HEIGHT:帧高度。
    • cv2.CAP_PROP_FPS:帧率(仅对视频文件有效)。
    • cv2.CAP_PROP_BRIGHTNESS:亮度(部分摄像头支持)。
# 设置摄像头分辨率(不一定所有摄像头都支持)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

且趁余花谋一笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值