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)
- 功能:将图像数据保存为文件。
- 参数:
- 常见问题:
- 权限不足:若路径无写入权限会保存失败。
- 数据范围:若
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,