OpenCV是Python图像识别的起点,需掌握读图(注意BGR格式与中文路径)、显示(waitKey+destroyAllWindows)、灰度化(cvtColor)、缩放(resize及插值选择)、边缘检测(Canny)等核心操作。

想用Python做图像识别,OpenCV是绕不开的起点。它不难上手,但得先搞懂几个核心操作:读图、显示、存图、转灰度、缩放和边缘检测——这些不是炫技,而是后续识别任务的共同基础。
读取与显示图像:别卡在第一步
OpenCV默认用BGR格式读图(不是常见的RGB),这点容易出错。用cv2.imread()加载图片后,直接用cv2.imshow()显示,但记得加cv2.waitKey(0)等待按键,否则窗口一闪就关了;按任意键后还要调用cv2.destroyAllWindows()清理窗口。
- 路径含中文?会报错。建议用cv2.imdecode(np.fromfile(路径, dtype=np.uint8), -1)安全读取
- 读取失败返回None,加一句if img is None: print("读取失败")提前排查
颜色空间转换与灰度化:识别前的关键预处理
多数图像识别算法(比如轮廓提取、模板匹配)更依赖亮度信息而非颜色。用cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)转灰度最常用;若需HSV、LAB等空间,也只需换对应标志符。
- BGR转RGB用cv2.COLOR_BGR2RGB,配合matplotlib显示才不会偏色
- 灰度图是单通道,shape形如(height, width);原图是三通道,shape为(height, width, 3)
图像缩放与几何变换:适配不同尺寸输入
摄像头画面、手机照片、网络图片尺寸千差万别。用cv2.resize(img, (w, h))统一尺寸最直接;设fx和fy参数可按比例缩放(如fx=0.5, fy=0.5缩小一半)。
立即学习“Python免费学习笔记(深入)”;
- 缩放时推荐插值方式:cv2.INTER_AREA适合缩小,cv2.INTER_LINEAR适合放大
- 旋转、平移等可用cv2.getRotationMatrix2D + cv2.warpAffine组合实现,但初学先掌握resize就够了
边缘检测与简单二值化:让目标“跳出来”
边缘是图像中像素强度突变的位置,对定位物体轮廓至关重要。Canny是最经典的方法:cv2.Canny(gray, 50, 150)两个阈值控制灵敏度;而cv2.threshold能生成黑白分明的掩膜,方便后续计算面积或找轮廓。
- Canny结果是二值图(只有0和255),常配合cv2.findContours提取物体边界
- 二值化前建议先用cv2.GaussianBlur模糊降噪,避免边缘断裂或毛刺
不复杂但容易忽略——真正动手写几行代码,把一张图从读入到边缘提取跑通,你就已经站在图像识别的大门口了。










