OpenCV(Python版)图像处理官方向说明文档
一、基础认知(对应你代码里的(1204,1204,3))
1.图像数据存储规则
Python环境下OpenCV用NumPy数组存储图像:
数组维度格式: (高度height, 宽度width, 通道数channels),你的(1204,1204,3):第1个 1204:纵向像素行数(图像高度)第2个 1204:横向像素列数(图像宽度)3:BGR三通道(OpenCV默认顺序:蓝Blue、绿Green、红Red,不是日常RGB) 像素取值:单通道数值范围 0~255(uint8无符号整型),0最暗、255最亮;灰度图通道数为1。
2.官方文档权威入口
中文官方文档:https://docs.opencv.ac.cn/4.12.0/ 英文原版:https://docs.opencv.org/ 核心图像处理模块: imgproc(滤波、色彩转换、形态学运算等)、imgcodecs(读写图片)、highgui(窗口可视化)
二、核心基础API(匹配你当前读写图像的代码)
1.图像读写(imgcodecs模块)
import cv2# 读取图像:参数1文件路径;参数2读取模式(默认彩色cv2.IMREAD_COLOR)img = cv2.imread(”20230222.JPG”)# 读取失败返回None(常见坑:路径含中文、文件不存在)# 获取图像尺寸(就是你打印的shape)h, w, c = img.shapeprint(h,w,c)# 保存图像cv2.imwrite(”out.jpg”, img)
⚠️ 注意:imread不识别中文路径,路径含中文需先用numpy.fromfile读取。
2.窗口可视化(highgui模块)
cv2.namedWindow(”原图”, cv2.WINDOW_NORMAL)# 创建可缩放窗口cv2.imshow(”原图”, img)cv2.waitKey(0)# 0=无限等待按键;填数字代表毫秒级等待时长cv2.destroyAllWindows()# 销毁全部窗口,释放内存
3.像素遍历(你for i in img的原理)
for i in img:按行遍历整图,每次循环拿到一行(宽度,3)的像素数组;若要遍历单个像素,双层循环写法:
for row in img:for pixel in row:b,g,r = pixel# 依次解包蓝、绿、红通道值
三、高频图像处理功能(imgproc模块,官方标准API)
1.色彩空间转换
# BGR转灰度图gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# BGR转RGB(对接PIL/Matplotlib必须转换,否则颜色偏色)rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
2.几何变换
# 缩放resized = cv2.resize(img,(600,600))# 裁剪(numpy切片:[高范围,宽范围])crop = img[200:800,200:800]# 旋转、仿射变换:warpAffine系列函数
3.滤波降噪(图像平滑)
cv2.blur() | |
cv2.GaussianBlur() | |
cv2.medianBlur() |
4.阈值分割(二值化)
# 全局阈值ret, binary = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)# 自适应阈值:光照不均场景优先使用adap_binary = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,11,2)
5.边缘检测(Canny经典算子)
edge = cv2.Canny(gray, threshold1=50, threshold2=150)6.形态学运算(去噪、填充孔洞)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))open_img = cv2.morphologyEx(binary,cv2.MORPH_OPEN,kernel)# 开运算:去除小白噪点close_img = cv2.morphologyEx(binary,cv2.MORPH_CLOSE,kernel)# 闭运算:填充小黑孔洞
四、你实操的常见坑(官方文档重点提醒)
通道顺序坑:OpenCV读入BGR,Matplotlib/PIL显示RGB,不转换会红蓝颠倒; 中文路径坑: imread/imwrite不支持中文路径,改用np.fromfile+cv2.imdecode;空图像坑: img=None时访问img.shape直接报错,读取后先判空:if img is None: print("图片读取失败");数据类型坑:像素运算超出 0~255会数值溢出,加减运算优先用cv2.add而非+运算符。
五、模块总览(官方划分)
六、配套学习建议
先吃透像素遍历、shape维度、BGR通道顺序(就是你现在练习的内容); 对照中文官方文档的「教程板块」,逐API运行示例代码; 后续做项目优先调用官方封装函数,不要手写循环处理像素(OpenCV底层C++优化,速度远快于Python循环)。
夜雨聆风