AI大模型应用开发-图像基础:OpenCV 安装、读取图片、灰度化(黑白图)、裁剪 / 旋转图片
无复杂原理,核心讲清 OpenCV 处理图片的基础操作,是后续 CNN 图像识别、图像处理的入门必备,所有代码适配 Windows/Linux,小白 30 分钟可跑通全部案例
一、前置核心认知:OpenCV 是什么?
1. 核心定位
OpenCV(Open Source Computer Vision Library)= 图像处理 / 计算机视觉的 “万能工具库”,是全球最主流的开源图像 / 视频处理库,能通过代码实现图片读取、修改、分析等所有基础操作,就像 “代码版的美图秀秀”,但更精准、更适配 AI 任务(比如 CNN 图像识别前的图片预处理)。
2. 小白通俗理解
你手机里的 “美图秀秀” 能手动裁剪、调黑白、旋转图片;OpenCV 就是用代码代替手动操作,让计算机自动完成这些事 —— 后续不管是做图片分类、目标检测,还是视频分析,第一步都是用 OpenCV 处理图片。
二、第一步:OpenCV 安装(小白极简版)
1. 安装命令(Windows/Linux 通用,国内源加速)
打开 CMD / 终端,输入以下命令(opencv-python是核心包,包含所有基础功能):
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
2. 验证安装(确保无报错)
新建test_opencv.py文件,运行以下代码,无报错即安装成功:
python
# 导入OpenCV库(约定俗成简写为cv2)
import cv2
# 打印版本号,验证安装
print("OpenCV版本:", cv2.__version__)
三、核心操作 1:读取图片(最基础的第一步)
1. 核心逻辑
读取图片 = 让 OpenCV “打开” 本地的图片文件,转换成程序能处理的 “图像矩阵”(小白可理解为 “图片的数字形式”)。
2. 小白避坑重点
- 图片路径不要有中文 / 空格(比如
C:\图片\测试.jpg会报错,建议改为C:\img\test.jpg); - 优先用绝对路径(比如
C:\Users\XXX\Desktop\test.jpg),避免相对路径找不到文件; - OpenCV 读取彩色图片时,默认按
BGR格式存储(不是常见的RGB),但不影响基础操作。
3. 完整代码(读取 + 显示图片)
python
import cv2
# 1. 读取图片(参数1:图片路径;参数2:读取模式,cv2.IMREAD_COLOR=彩色,cv2.IMREAD_GRAYSCALE=灰度)
# 替换为你自己的图片绝对路径!!!
img_path = "C:\\Users\\XXX\\Desktop\\test.jpg" # Windows路径用双反斜杠,Linux用单斜杠
img = cv2.imread(img_path, cv2.IMREAD_COLOR)
# 检查图片是否读取成功(小白必加,避免路径错误导致后续报错)
if img is None:
print("错误:图片读取失败!请检查路径是否正确,或图片是否存在。")
else:
# 2. 显示图片(参数1:窗口名称;参数2:图像矩阵)
cv2.imshow("Original Image", img)
# 3. 等待按键(参数0=无限等待,按任意键关闭窗口;若填数字,比如1000=等待1秒后自动关闭)
cv2.waitKey(0)
# 4. 释放所有窗口(避免内存占用)
cv2.destroyAllWindows()
# 额外:查看图片的基本信息(可选)
print("图片形状(高度, 宽度, 通道数):", img.shape) # 彩色图是(H,W,3),灰度图是(H,W)
print("图片像素总数:", img.size)
print("像素数据类型:", img.dtype)
运行效果
弹出一个窗口,显示你指定路径的图片,按任意键窗口关闭。
四、核心操作 2:灰度化(转黑白图)
1. 核心逻辑
灰度化 = 把彩色图片(红 / 绿 / 蓝 3 个通道)转换成黑白图片(仅 1 个通道),目的是减少计算量(3 通道→1 通道),这是 CNN 图像识别前最常用的预处理步骤。
2. 通俗理解
就像手机拍照的 “黑白滤镜”,去掉颜色信息,只保留明暗,计算机处理黑白图会快很多。
3. 完整代码(读取→灰度化→显示对比)
python
import cv2
# 读取彩色图片
img_path = "C:\\Users\\XXX\\Desktop\\test.jpg"
img_color = cv2.imread(img_path, cv2.IMREAD_COLOR)
if img_color is None:
print("错误:图片读取失败!")
else:
# 1. 灰度化(核心函数:cv2.cvtColor,参数2=COLOR_BGR2GRAY表示BGR转灰度)
img_gray = cv2.cvtColor(img_color, cv2.COLOR_BGR2GRAY)
# 2. 显示彩色图和灰度图(并排显示)
cv2.imshow("Color Image", img_color)
cv2.imshow("Gray Image", img_gray)
# 3. 保存灰度图到本地(可选)
cv2.imwrite("C:\\Users\\XXX\\Desktop\\test_gray.jpg", img_gray)
# 4. 等待按键+释放窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
# 查看灰度图信息(对比彩色图)
print("彩色图形状:", img_color.shape) # (H,W,3)
print("灰度图形状:", img_gray.shape) # (H,W)
运行效果
弹出两个窗口,一个显示彩色原图,一个显示黑白灰度图;同时本地会生成test_gray.jpg文件。
五、核心操作 3:裁剪图片(“截图” 局部区域)
1. 核心逻辑
裁剪图片 = 截取图片的指定区域,OpenCV 中图像是 “行列矩阵”:
- 行(y 轴):对应图片的高度;
- 列(x 轴):对应图片的宽度;
- 裁剪格式:
img[行起始:行结束, 列起始:列结束](小白记:img[y1:y2, x1:x2])。
2. 通俗理解
就像用截图工具框选图片的一部分,只保留框内的内容。
3. 完整代码(读取→裁剪→显示)
python
import cv2
img_path = "C:\\Users\\XXX\\Desktop\\test.jpg"
img = cv2.imread(img_path, cv2.IMREAD_COLOR)
if img is None:
print("错误:图片读取失败!")
else:
# 查看图片尺寸,确定裁剪范围(比如图片尺寸是(800, 1200, 3),即高度800,宽度1200)
h, w = img.shape[:2]
print(f"图片高度:{h},宽度:{w}")
# 1. 定义裁剪范围(示例:截取图片中间区域)
# y1=200, y2=600(行范围);x1=300, x2=900(列范围)
y1, y2 = 200, 600
x1, x2 = 300, 900
img_crop = img[y1:y2, x1:x2]
# 2. 显示原图和裁剪后的图
cv2.imshow("Original Image", img)
cv2.imshow("Cropped Image", img_crop)
# 3. 保存裁剪后的图片
cv2.imwrite("C:\\Users\\XXX\\Desktop\\test_crop.jpg", img_crop)
# 4. 等待按键+释放窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
小白技巧
裁剪范围可以根据自己的图片尺寸调整,比如想截取左上角 1/4 区域:
python
y1, y2 = 0, h//2
x1, x2 = 0, w//2
六、核心操作 4:旋转图片(绕中心转指定角度)
1. 核心逻辑
旋转图片需要两步(小白不用深究原理,记固定流程即可):
- 计算旋转矩阵:指定 “旋转中心、旋转角度、缩放比例”;
- 仿射变换:用旋转矩阵对图片做旋转,输出新图片。
2. 通俗理解
就像用美图秀秀把图片旋转 90 度、180 度,或任意角度,OpenCV 能精准控制旋转角度和缩放。
3. 完整代码(读取→旋转→显示)
python
import cv2
import numpy as np # 处理矩阵,OpenCV依赖
img_path = "C:\\Users\\XXX\\Desktop\\test.jpg"
img = cv2.imread(img_path, cv2.IMREAD_COLOR)
if img is None:
print("错误:图片读取失败!")
else:
h, w = img.shape[:2]
# 1. 计算旋转矩阵(核心参数)
center = (w//2, h//2) # 旋转中心:图片正中心
angle = 90 # 旋转角度(正数=逆时针,负数=顺时针)
scale = 1.0 # 缩放比例(1.0=不缩放)
rotation_matrix = cv2.getRotationMatrix2D(center, angle, scale)
# 2. 执行旋转(仿射变换)
img_rotated = cv2.warpAffine(img, rotation_matrix, (w, h))
# 3. 显示原图和旋转后的图
cv2.imshow("Original Image", img)
cv2.imshow("Rotated Image (90°)", img_rotated)
# 4. 保存旋转后的图片
cv2.imwrite("C:\\Users\\XXX\\Desktop\\test_rotated.jpg", img_rotated)
# 5. 等待按键+释放窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
扩展:旋转任意角度(比如 45 度)
只需修改angle=45,但旋转非 90/180/270 度时,图片会出现黑边(因为尺寸变化),小白入门先掌握 90 度旋转即可。
七、小白避坑指南(核心 4 点)
- 图片读取失败(img is None):
- 检查路径是否正确,路径不要有中文 / 空格;
- Windows 路径用双反斜杠(
\\)或单斜杠加 r(r"C:\img\test.jpg")防止转义;
- 显示窗口闪退:
- 必须加
cv2.waitKey(0),否则窗口会瞬间关闭;
- 必须加
- 灰度化颜色异常:
- 不要改
COLOR_BGR2GRAY参数,OpenCV 默认 BGR 格式,该参数已适配;
- 不要改
- 旋转后图片不全:
- 旋转非 90 度倍数时,需重新计算输出尺寸(小白入门可暂时忽略)。
总结
- OpenCV 安装用
pip install opencv-python,导入cv2无报错即成功; - 读取图片核心是
cv2.imread(),务必检查路径,显示需配合imshow()+waitKey()+destroyAllWindows(); - 灰度化用
cv2.cvtColor(img, cv2.COLOR_BGR2GRAY),目的是减少计算量,是图像预处理的基础; - 裁剪图片用数组切片
img[y1:y2, x1:x2],旋转需先算旋转矩阵(getRotationMatrix2D)再仿射变换(warpAffine); - 所有操作的核心是把图片转换成 “数字矩阵”,通过修改矩阵实现图片的各种调整。
更多推荐



所有评论(0)