OpenCV基础操作完全指南(零基础入门)

OpenCV基础操作完全指南(零基础入门)

安装与环境配置

安装命令:pip install opencv-python
导入方式:import cv2
配套工具:import numpy as np


图像基础操作

读取与属性查看

img = cv2.imread('image.jpg', cv2.IMREAD_COLOR)

  • 第一个参数:文件路径
  • 第二个参数(可选):
  • cv2.IMREAD_COLOR:默认三通道BGR格式(注意不是RGB)
  • cv2.IMREAD_GRAYSCALE:直接读取为灰度图
  • cv2.IMREAD_UNCHANGED:包含Alpha通道的四通道

形状查看:img.shape 返回(高度,宽度,通道数)
数据类型:img.dtype 通常为uint8
像素极值:np.min(img)np.max(img)

显示与保存

显示窗口:cv2.imshow('Preview', img)
等待操作:cv2.waitKey(0)(0表示无限等待)
销毁窗口:cv2.destroyAllWindows()
保存文件:cv2.imwrite('output.png', img)

  • 第三个参数(可选):
    JPEG质量参数:0-100(默认95)
    PNG压缩级别:cv2.IMWRITE_PNG_COMPRESSION

色彩空间转换

BGR↔灰度转换

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
转换公式:0.299*R + 0.587*G + 0.114*B

BGR↔HSV转换

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
应用场景:颜色追踪时定义阈值范围
H:色调(0-180)
S:饱和度(0-255)
V:明度(0-255)


绘图功能精要

基础图形绘制

线段:cv2.line(img, (x1,y1), (x2,y2), (B,G,R), 线宽)
矩形:cv2.rectangle(img, (x,y), (x+w,y+h), (0,255,0), 2)
圆形:cv2.circle(img, (cx,cy), 半径, (0,0,255), -1)(-1为填充)
文字:cv2.putText(img, 'Text', (x,y), 字体, 字号, (255,0,0), 2)
cv2.ellipse
cv2.polylines


视频处理流程

实时摄像头处理

cap = cv2.VideoCapture(0) 初始化摄像头
while True:
ret, frame = cap.read() 读取帧
cv2.imshow('Live', frame) 显示画面
if cv2.waitKey(1) == 27: break ESC键退出
资源释放:cap.release()

视频文件输出

编码设置:fourcc = cv2.VideoWriter_fourcc(*'XVID')
写入对象:out = cv2.VideoWriter('output.avi', fourcc, 帧率, (宽,高))
写入帧:out.write(frame)


重要注意事项

颜色通道陷阱

OpenCV使用BGR格式,Matplotlib使用RGB格式,显示前需转换:
display_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

路径与权限问题

读取失败时检查:

  • 文件路径是否包含中文/特殊字符
  • 文件是否被其他程序占用
  • Linux/macOS系统的文件权限设置

内存管理

视频处理必须释放资源:
cap.release()
out.release()

数据类型

所有图像数据都是numpy.ndarray类型:
print(img.shape) # (height, width, channels)


综合应用案例

实时边缘检测实现

cap = cv2.VideoCapture(0) 
while True:  
 ret, frame = cap.read()  
 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 
 edges = cv2.Canny(gray, 100, 200)  # 双阈值边缘检测  
 cv2.imshow('Edges', edges)` 
 if cv2.waitKey(1) == 27: break` 

九宫格拼图制作

h, w = img.shape[:2] 
single_h = h//3  # 垂直分三份  
single_w = w//3  # 水平分三份  
mosaic = []  
for i in range(3): 
	row = np.hstack([img[i*single_h:(i+1)*single_h, j*single_w:(j+1)*single_w] for j in range(3)])  
	mosaic.append(row)  
	final = np.vstack(mosaic)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

六月五日

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

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

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

打赏作者

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

抵扣说明:

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

余额充值