乐于分享
好东西不私藏

OpenCV图像处理说明文档

OpenCV图像处理说明文档

OpenCV(Python版)图像处理官方向说明文档

一、基础认知(对应你代码里的(1204,1204,3))

1.图像数据存储规则

Python环境下OpenCV用NumPy数组存储图像

  • 数组维度格式:(高度height, 宽度width, 通道数channels),你的(1204,1204,3)
    1. 第1个1204:纵向像素行数(图像高度)
    2. 第2个1204:横向像素列数(图像宽度)
    3. 3
      BGR三通道(OpenCV默认顺序:蓝Blue、绿Green、红Red,不是日常RGB)
  • 像素取值:单通道数值范围0~255uint8无符号整型),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)# 闭运算:填充小黑孔洞

四、你实操的常见坑(官方文档重点提醒)

  1. 通道顺序坑:OpenCV读入BGR,Matplotlib/PIL显示RGB,不转换会红蓝颠倒;
  2. 中文路径坑imread/imwrite不支持中文路径,改用np.fromfile+cv2.imdecode
  3. 空图像坑img=None时访问img.shape直接报错,读取后先判空:if img is None: print("图片读取失败")
  4. 数据类型坑:像素运算超出0~255会数值溢出,加减运算优先用cv2.add而非+运算符。

五、模块总览(官方划分)

模块
职责
core
基础矩阵运算、数组操作
imgcodecs
图片读写
imgproc
滤波、色彩转换、阈值、形态学、边缘检测
highgui
窗口、按键交互
video
视频读写、目标追踪
calib3d
相机标定、三维重建

六、配套学习建议

  1. 先吃透像素遍历、shape维度、BGR通道顺序(就是你现在练习的内容);
  2. 对照中文官方文档的「教程板块」,逐API运行示例代码;
  3. 后续做项目优先调用官方封装函数,不要手写循环处理像素(OpenCV底层C++优化,速度远快于Python循环)。