图像处理是现代领域,如人工智能、计算机视觉和机器人技术中的一个重要环节。OpenCV 是一个强大的开源库,让开发人员能够轻松地处理复杂的图像任务。本博客将带你使用 Python 学习图像处理的基本技能,从读取和显示图像、转换颜色空间和调整图像大小,到更高级的任务如边缘检测、轮廓检测和阈值处理,本博客都将一一涵盖。通过实际操作示例,你将学会轻松地操作和增强图像。
目录- 1. OpenCV简介
- 2. 读取和显示图片
- 3. 转换颜色空间
- 4. 调整图片大小
- 5. 旋转图片
- 6. 模糊图片
- 7. 使用Canny算法检测边缘
- 8. 绘制形状并添加文字
- 9. 阈值处理
- 10. 检测轮廓
- 结论
OpenCV 是一个广泛使用的开源计算机视觉库,让开发人员能够轻松地处理图像和视频流。它是诸如图像识别、滤波、边缘检测等许多任务的首选工具。此外,OpenCV 还支持跨平台,更适合大规模的AI和机器学习应用。
1.1 安装OpenCV教程在我们开始之前,请确认已经安装好OpenCV。你可以使用pip
轻松安装它。
运行此命令以安装OpenCV库:
pip install opencv-python
2. 阅读和显示图片
如果你想开始图像处理,你首先需要先加载再显示一张图片。
2.1 代码示例如下: # 从文件里读取图片
image = cv2.imread('image.jpg')
# 在窗口里显示图片
cv2.imshow('Image', image)
# 等待按键后关闭窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
查看和显示图片
2.2 解释如下:**cv2.imread()**
:从指定文件中读取图像,返回一个表示图像的矩阵。**cv2.imshow()**
:在窗口中显示图像。第一个参数是窗口名称,第二个参数是图像矩阵。**cv2.waitKey(0)**
:这个函数会无限期等待用户按键,直到用户按下按键才会关闭窗口。**cv2.destroyAllWindows()**
:确保所有窗口在用户退出程序时都能正确关闭。
OpenCV 使用 BGR 格式(蓝、绿、红)加载图像。然而,其他颜色空间,如灰度,也很有用。在图像处理过程中,在这些颜色空间之间转换是最常见的操作之一。
3.1 代码示例:将图片转为灰度 # 加载图片,
image = cv2.imread('image.jpg')
# 将图像转换为灰度,
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 保存为灰度图像,
cv2.imwrite('gray_image.jpg', gray_image)
把图片转成黑白
3.2 解释一下:**cv2.cvtColor()**
:将图像从一种颜色格式转换为另一种颜色格式。例如,从BGR转换成灰度。在这里,我们将图像从BGR转换成灰度。
有时,为了存储或标准化机器学习的模型尺寸,需要调整图像大小。
4.1 示例代码:调整图片大小 # 读取图像
image = cv2.imread('image.jpg')
# 调整图像大小为 300x200
resized_image = cv2.resize(image, (300, 200))
# 保存调整后的图像到文件
cv2.imwrite('resized_image.jpg', resized_image)
调整图片大小
4.2 解释如下:**cv2.resize()**
:将输入图像缩放为指定的宽度和高度。在这里,图像变为300x200px。
旋转是图像操作中的另一个关键方面,特别是在如物体检测和图像对准等任务中。
5.1 代码示例:把图像转90度 # 加载图片.
image = cv2.imread('image.jpg')
# 获取图片的高度和宽度.
(h, w) = image.shape[:2]
# 定义图片的中心.
center = (w // 2, h // 2)
# 旋转矩阵公式.
matrix = cv2.getRotationMatrix2D(center, 90, 1.0)
# 旋转.
rotated_image = cv2.warpAffine(image, matrix, (w, h))
# 保存旋转后的图片.
cv2.imwrite('rotated_image.jpg', rotated_image)
旋转图片
5.2 解释说明:**cv2.getRotationMatrix2D()**
:创建一个用于描述旋转的变换矩阵。它根据中心点、旋转角度(以度为单位)和缩放比例。**cv2.warpAffine()**
:根据变换矩阵旋转图像。
- 把一张图片模糊掉
降噪、目标检测和特征抽取都是模糊技术的重要应用。
6.1 代码示例:应用高斯模糊效果 # 读取图像
image = cv2.imread('image.jpg')
# 应用高斯滤波
blurred_image = cv2.GaussianBlur(image, (15, 15), 0)
# 保存处理后的图像
cv2.imwrite('blurred_image.jpg', blurred_image)
应用高斯模糊效果
6.2 解释如下:**cv2.GaussianBlur()**
:使用高斯滤波模糊图像。第二个参数是(kernel)大小,第三个参数是标准偏差。
边缘检测是许多计算机视觉应用中的一个关键功能,例如目标检测和识别。OpenCV 提供了 "Canny" 边缘检测算法。
7.1 代码示例:使用 Canny 算法识别边缘 # 读取图像
image = cv2.imread('image.jpg')
# 转换为灰度图
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 使用Canny边缘检测器
edges = cv2.Canny(gray_image, 100, 200)
# 保存边缘图
cv2.imwrite('edges.jpg', edges)
使用Canny算法来检测边缘
7.2 解释一下:**cv2.Canny()**
:进行Canny边缘检测,检测输入图像的边缘。这两个参数分别定义了边缘检测的下限和上限阈值。
有时你可能想在图片上画图形或加文字来做标注。
8.1 代码示例:画一个矩形并在其中添加文本 # 加载图像
image = cv2.imread('image.jpg')
# 绘制一个矩形
cv2.rectangle(image, (50, 50), (200, 200), (255, 0, 0), 3)
# 在图像上添加文本
cv2.putText(image, 'OpenCV', (60, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
# 保存结果图像
cv2.imwrite('output_image.jpg', image)
画一个矩形并写上文字
8.2 解释一下:**cv2.rectangle()**
:画一个矩形。你需要提供矩形的左上角和右下角点、颜色值和厚度。**cv2.putText()**
:在图片上加上文字,指定字体、字体大小、文本位置和颜色值。
阈值化是一种将图像二值化的方法。它常用于图像分割中,我们通常希望从背景中分离目标。
9.1 代码示例:应用二值化阈值处理: # 读取图像
image = cv2.imread('image.jpg', 0)
# 应用阈值
_, thresh_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)
# 保存处理后的图像
cv2.imwrite('threshold_image.jpg', thresh_image)
进行二值化阈值处理
9.2 解释如下:**cv2.threshold()**
是根据阈值将图像转换为二值图像的函数。
轮廓表示图像中物体的边缘。这项技术常用于边缘检测和形状分析中。
10.1 代码示例:检测轮廓并绘制出来 # 加载图像
image = cv2.imread('image.jpg')
# 将图像转换成灰度
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 检测图像边缘
edges = cv2.Canny(gray_image, 100, 200)
# 查找轮廓
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 在原始图像上绘制轮廓
cv2.drawContours(image, contours, -1, (0, 255, 0), 2)
# 保存带有轮廓的图像输出
cv2.imwrite('contours_image.jpg', image)
检测并绘制轮廓
10.2 让我们解释一下**cv2.findContours()**
:在二值图像中查找轮廓。**cv2.drawContours()**
:在原图上画出轮廓。
OpenCV 是一个极其多功能的库,提供了众多用于图像处理的工具。这些工具从简单的图像缩放和旋转,到较为复杂的边缘识别和轮廓分析。无论是开发AI模型还是探索计算机视觉,OpenCV 都应该是你处理和分析图像时的主要工具。
共同学习,写下你的评论
评论加载中...
作者其他优质文章