从零开始学 OpenCV:Python 图像处理核心操作实战
计算机视觉是人工智能领域的重要分支,而 OpenCV 则是处理图像和视频数据的利器。本文将基于 Python 版本的 OpenCV,从最基础的图像读取、显示,到视频处理、色彩通道操作、图像修改与缩放,手把手带你掌握计算机视觉的核心基础操作。
首先安装OpenCV的核心包和拓展包:
pip install opencv-python==3.4.18.65 -i https://pypi.tuna.tsinghua.edu.cn/simple pip install opencv-contrib-python==3.4.18.65 -i https://pypi.tuna.tsinghua.edu.cn/simpleopencv-python==3.4.18.65:OpenCV 的核心功能包,包含图像读取、处理、视频操作等基础功能,满足你之前代码中所有图像处理需求;
opencv-contrib-python==3.4.18.65:OpenCV 的扩展包,包含一些额外的高级功能(如特征检测、人脸识别等),且必须与核心包版本完全一致;
一、图像的基础读写与属性查看
1. 读取与显示图像
OpenCV 是计算机视觉领域最常用的库之一,它默认以 BGR 色彩模式读取图像(而非我们熟知的 RGB)。核心的图像读写显示操作仅需几行代码即可完成:
import cv2 import numpy as np # 读取图片(BGR格式) img = cv2.imread('img1.jpeg') # 显示图片:参数为窗口名称、图像数据 cv2.imshow('tupian', img) # 等待按键输入:0表示永久显示,返回按键ASCII码 key = cv2.waitKey(0) # 关闭所有窗口,释放内存 cv2.destroyAllWindows() 2. 查看图像核心属性
读取图像后,我们可以通过 numpy 数组的属性查看图像的关键信息,这对后续处理至关重要:
# 图像形状:(高度, 宽度, 通道数) print('图像形状:', img.shape) # 数据类型:通常为uint8(0-255像素值) print('图像数据类型:', img.dtype) # 总像素数:高度×宽度×通道数 print('图像总像素数:', img.size) 运行结果:


3. 读取灰度图
很多场景下我们需要处理灰度图像(单通道),只需在读取时指定参数:
import cv2 import numpy as np # 以灰度模式读取图像 gray_img = cv2.imread('img1.jpeg', cv2.IMREAD_GRAYSCALE) cv2.imshow('xx', gray_img) cv2.waitKey(0) cv2.destroyAllWindows() # 灰度图属性:仅(高度, 宽度),无通道数 print('灰度图形状:', gray_img.shape) # 保存处理后的图像 cv2.imwrite('img1_GRAY.jpeg', gray_img) 运行结果:


二、视频文件的读取与处理
OpenCV 不仅能处理静态图像,还能轻松读取视频文件并逐帧处理:
import cv2 import numpy as np # 打开视频文件(参数为0可调用摄像头) video_capture = cv2.VideoCapture('video1.mp4') # 检查视频是否成功打开 if not video_capture.isOpened(): print('无法打开视频文件') exit() # 循环读取视频帧 while True: # ret:是否成功读取帧;frame:帧数据 ret, frame = video_capture.read() if not ret: # 读取完毕则退出循环 break # 将帧转为灰度图 gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.imshow('Video', gray_frame) # 按下ESC键(ASCII码27)退出,60ms/帧控制播放速度 if cv2.waitKey(60) == 27: break # 释放视频资源 video_capture.release() cv2.destroyAllWindows() 运行结果:

三、ROI 与色彩通道操作
1. 提取感兴趣区域(ROI)
ROI(Region of Interest)是图像中我们关注的特定区域,通过 numpy 数组切片即可快速提取:
import cv2 import numpy as np img = cv2.imread('img1.jpeg') # 提取ROI:[行范围, 列范围] → 对应[高度范围, 宽度范围] roi = img[30:230, 100:300] cv2.imshow('yuantu', img) cv2.imshow('qiepian', roi) cv2.waitKey(0) cv2.destroyAllWindows() 运行结果:

2. 色彩通道的拆分与合并
OpenCV 读取的图像是 BGR 格式,我们可以拆分单个通道,也可以合并通道重构图像:
(1)拆分通道
import cv2 import numpy as np img = cv2.imread('img1.jpeg') # 方法1:数组切片 b_channel = img[:, :, 0] # 蓝色通道 g_channel = img[:, :, 1] # 绿色通道 r_channel = img[:, :, 2] # 红色通道 # 方法2:cv2.split(效率稍低) b, g, r = cv2.split(img) # 注意:单独显示单通道为灰度图(仅亮度信息) cv2.imshow('b', b) cv2.imshow('g', g) cv2.imshow('r', r) cv2.waitKey(0) cv2.destroyAllWindows() 运行结果:

(2)显示单通道彩色效果
若想直观看到单通道的彩色效果,需将其他通道置 0:
import cv2 import numpy as np img = cv2.imread('img1.jpeg') # 复制原图像,避免修改原图 img_blue = img.copy() # 绿色通道置0 img_blue[:, :, 1] = 0 # 红色通道置0 img_blue[:, :, 2] = 0 cv2.imshow('result2', img_blue) cv2.waitKey(0) cv2.destroyAllWindows() 运行结果:

(3)合并通道
# 合并BGR通道,重构原图像 merged_img = cv2.merge((b, g, r)) cv2.imshow('result3', merged_img) cv2.waitKey(0) cv2.destroyAllWindows() 运行结果:

四、图像修改与缩放
1. 图像像素修改
我们可以直接通过数组赋值修改图像像素,实现如 “马赛克” 等效果:
import cv2 import numpy as np img = cv2.imread('img1.jpeg') # 对指定区域赋值随机像素(马赛克效果) img[100:200, 200:300] = np.random.randint(0, 256, (100, 100, 3)) cv2.imshow('masike', img) cv2.waitKey(0) cv2.destroyAllWindows() # 图像拼接:将img1的区域替换到img2中 img1 = cv2.imread('img1.jpeg') img2 = cv2.imread('img2.jpeg') # 注意:替换区域尺寸需匹配 img2[200:350, 200:350] = img1[50:200, 100:250] cv2.imshow('b', img1) cv2.imshow('a', img2) cv2.waitKey(0) cv2.destroyAllWindows() 运行结果:


2. 图像缩放
cv2.resize是调整图像大小的核心函数,支持指定尺寸或缩放比例两种方式:
import cv2 import numpy as np a = cv2.imread('img1.jpeg') # 方式1:指定目标尺寸(宽, 高) a_new = cv2.resize(a, (300, 200)) # 方式2:指定缩放比例(fx:x轴缩放系数,fy:y轴缩放系数) # a_new = cv2.resize(a,None,fx=1.5,fy=0.5) cv2.imshow('a', a) cv2.imshow('a_new', a_new) cv2.waitKey(0) cv2.destroyAllWindows()运行结果:

五、总结
本文基于 OpenCV-Python,梳理了计算机视觉入门的核心操作,核心要点如下:
- OpenCV 默认以 BGR 格式读取图像,可通过参数读取灰度图,读写显示需配合与窗口管理imread/imshow/imwrite函数;
- 视频处理本质是逐帧读取与处理,需注意循环终止条件和资源释放;
- 图像的 ROI 提取、色彩通道拆分 / 合并、像素修改、缩放均基于 numpy 数组操作,是 OpenCV 处理的核心逻辑;
- 单通道显示为灰度图,若需彩色效果需将其他通道置 0,通道合并需按 BGR 顺序。
这些基础操作是计算机视觉进阶(如目标检测、图像分割、特征提取)的基石,掌握后可结合实际场景灵活扩展,比如实现图像水印、视频特效、人脸马赛克等功能。