Python图像处理入门:使用OpenCV库进行图像读取与显示的详细教程

[id_766[id_989589553][id_[id_1270899679]6224572]2244]

Python图像处理入门:使用OpenCV库进行图像读取与显示的详细教程

初步认识OpenCV

[id_1909661003]

pip install opencv-python

搞定后,咱们来加载并显示一张图片试试。

import cv2

# 读取图片
image = cv2.imread('path_to_your_image.jpg')

# 显示图片
cv2.imshow('My Image', image)

# 等待按键事件,0表示无限等待
cv2.waitKey(0)

# 关闭所有窗口
cv2.destroyAllWindows()

温馨提示:注意图片路径要正确哦,不然会显示不出图片的。

图像的读取与显示

读取图像的是 cv2.imread()函数。显示图像的是 cv2.imshow()函数。cv2.waitKey()函数是用来等待键盘输入的,其参数是等待时间(毫秒),当参数为 0 时表示无限等待。cv2.destroyAllWindows()是用于关闭所有窗口的。

你或许会察觉到,所读取的图像颜色存在些许异样。这是由于 OpenCV 通常会采用 BGR 颜色格式,然而我们日常所使用的图片大多是 RGB 格式。因此,在某些时候需要手动进行颜色的转换。

# 将BGR转换为RGB
图像的 RGB 色彩空间表示为 image_rgb,它是通过将图像从 BGR 色彩空间转换而来的,转换过程使用了 cv2.cvtColor 函数,具体是将图像从 cv2.COLOR_BGR2RGB 的色彩空间进行转换。

图像的基本操作裁剪图像

裁剪图像其实就是选取图像的一部分。可以使用数组切片来实现。

# 假设要裁剪的区域为(x, y, w, h)
x, y, w, h = 50, 50, 200, 200
cropped_image 是从 image 中截取的部分,其范围是从 y 行到 y + h 行,以及从 x 列到 x + w 列。

cv2.imshow('Cropped Image', cropped_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

[id_149715023]

可以用 cv2.resize()函数来调整图像大小,并且需要指定新的尺寸或者缩放比例。

# 指定新的尺寸
new_dimensions = (300, 300)
cv2 对 image 进行了尺寸调整操作,调整后的尺寸为 new_dimensions,得到的结果存储在 resized_image 中。

# 或者指定缩放比例
scale_percent = 50  # 缩小为原来的50%
width = int(image.shape[1] * scale_percent / 100)
height = int(image.shape[0] * scale_percent / 100)
dim = (width, height)
cv2 对图像进行了尺寸调整操作,将图像调整为指定的尺寸 dim,使用的插值方法是 cv2.INTER_AREA,调整后的图像比例为 resized_image_scale

cv2.imshow('Resized Image', resized_image)
cv2.imshow('Resized Image by Scale', resized_image_scale)
cv2.waitKey(0)
cv2.destroyAllWindows()

温馨提示:在调整图像大小时,要记得去选择合适的插值方法。其中,cv2.INTER_AREA可用于缩小图像,cv2.INTER_LINEAR可用于放大图像。

旋转图像

旋转图像较为复杂,需要运用一些数学运算。例如要获取旋转矩阵,接着进行仿射变换。

# 获取图像中心
(h, w) = image.shape[:2]
center = (w // 2, h // 2)

# 指定旋转角度和缩放比例
angle = 45
scale = 1.0

# 获取旋转矩阵
M 等于 cv2 获取旋转矩阵 2D,其中包含中心坐标 center、角度 angle 和缩放比例 scale

# 进行仿射变换
使用 cv2 库的 warpAffine 函数,将图像 image 按照矩阵 M 进行旋转操作,得到旋转后的图像 rotated_image,旋转后的图像尺寸为 (w, h)。

cv2.imshow('Rotated Image', rotated_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

图像的滤波操作均值滤波

此方法用于去除图像噪声。

# 均值滤波
blurred_image 是通过 cv2 对 image 进行模糊处理得到的,使用的模糊核大小为 ( 。5, 5))

cv2.imshow('Blurred Image', blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

高斯滤波

高斯滤波和均值滤波有相似之处,不过它们的权重不一样。其中,离中心越近的像素点,其权重越高。

# 高斯滤波
cv2 对图像进行高斯模糊操作得到模糊图像 = cv2.GaussianBlur(图像,())5, 5), 0)

cv2.imshow('Gaussian Blurred Image', blurred_image_gaussian)
cv2.waitKey(0)
cv2.destroyAllWindows()

温馨提示:高斯滤波有一个第三个参数,此参数是标准差。当这个参数为 0 时,OpenCV 会依据核的大小来进行计算。

中值滤波

中值滤波会用像素点周围的所有像素点的中值去替代这个像素点的值。它对于去除椒盐噪声有着特别的效果。

# 中值滤波
中位数模糊图像等于 cv2 对图像进行中值滤波,滤波核大小为指定值。5)

cv2.imshow('Median Blurred Image', median_blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

边缘检测

边缘检测属于图像处理中的经典任务。在图像处理中,常用的算法里有 Canny 边缘检测。

# 转换为灰度图像
gray_image 是通过 cv2.cvtColor 函数将 image 从 cv2.COLOR_BGR2GRAY 颜色空间进行转换得到的。

# 应用高斯模糊以减少噪声
模糊的灰度图像等于 cv2 进行高斯模糊处理后的灰度图像,其中高斯模糊的核大小为(5, 5), 0)

# Canny边缘检测
edges 等于使用 cv2.Canny 函数对 blurred_gray_image 进行处理,其中 blurred_gray_image 为模糊后的灰度图像,cv2.Canny 函数用于边缘检测,通过设置合适的阈值来提取图像中的边缘信息。50, 150)

cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

温馨提示:Canny 边缘检测具备两个阈值参数,一个是低阈值,另一个是高阈值。只有当像素的梯度超过高阈值时,才会被认定为边缘;而低于低阈值的像素会被排除在外;处于低阈值和高阈值之间的像素,则会依据其连接性来决定是否予以保留。

图像阈值处理

图像阈值处理的作用是把图像转变为二值图像,意味着图像上的每一个像素点不是黑色就是白色。

# 全局阈值处理
通过 cv2.threshold 函数,将 gray_image 进行阈值处理,得到了 thresholded_image 。具体来说,是将 gray_image 与某个阈值进行比较,当灰度值大于或等于该阈值时,对应的像素值被设置为一个特定的值(通常为 255),当灰度值小于该阈值时,对应的像素值被设置为另一个特定的值(通常为 0),从而得到了二值化的图像 thresholded_image 。127, 255, cv2.THRESH_BINARY)

cv2.imshow('Thresholded Image', thresholded_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

温馨提示:cv2.threshold()函数的第一个参数为输入图像;第二个参数是阈值;第三个参数是最大值;第四个参数是阈值类型,例如 cv2.THRESH_BINARY。

总结

今天咱们学习了怎样使用 OpenCV 来进行图像处理。其中包括对图像的读取以及显示操作。还有基本操作,像裁剪、调整大小以及旋转等。以及滤波操作,包含均值滤波、高斯滤波和中值滤波。还有边缘检测和图像阈值处理。这些操作在图像处理以及计算机视觉任务里都十分常见,希望能对你有所帮助!

别忘了,多动手实践,多写代码,才能更好地掌握这些知识点哦!

你可能想看:
« 上一篇
下一篇 »

相关推荐

python爬虫教程PDF,Python爬虫书PDF

2026年09月02日

31阅读

外国教程python,python编程教学视频

2026年09月02日

25阅读

python简明教程沈洁元,python详细基础教程

2026年09月02日

21阅读

python库包教程,python 包

2026年09月02日

27阅读

python教程大全集,python教程600集

2026年09月02日

26阅读

python入门教程完整版,python零基础入门全套教程视频

2026年09月02日

23阅读