人工智能-python-OpenCV 图像基础认知与运用-图像的预处理(1)
文章目录
- OpenCV 图像基础认知与运用
OpenCV 图像基础认知与运用
OpenCV 是一个开源的计算机视觉库,广泛应用于图像处理和计算机视觉领域。本文将详细介绍 OpenCV 中图像的基础认知与常见运用,包括图像的基本操作、仿射变换、颜色空间转换、图像加法、二值化处理等内容。了解这些基础知识将有助于你更好地掌握 OpenCV 及其应用。
1. 图像翻转与仿射变换
1.1. 图像翻转
在 OpenCV 中,图像翻转是指对图像进行镜像处理。翻转操作是基于图像中心进行的。
cv2.flip() 函数用于执行图像翻转。参数说明如下:
-
img:要翻转的图像。
-
flipcode:指定翻转类型:
- 0:垂直翻转(上下翻转)。
- >0:水平翻转(左右翻转)。
- <0:同时水平和垂直翻转。
示例代码:
import cv2img = cv2.imread(\"image.jpg\")flipped_img = cv2.flip(img, 1) # 水平翻转cv2.imshow(\"Flipped Image\", flipped_img)cv2.waitKey(0)cv2.destroyAllWindows()
1.2. 图像仿射变换
仿射变换通过线性变换改变图像的位置和形状。通过 OpenCV 提供的 cv2.warpAffine()
函数,可以执行图像的仿射变换。
仿射变换需要一个 2x3 的变换矩阵 M,该矩阵是根据给定的变换(如平移、旋转、缩放等)计算得到的。
示例代码:
import numpy as npimport cv2img = cv2.imread(\"image.jpg\")M = np.float32([[1, 0, 100], [0, 1, 50]]) # 平移矩阵height, width = img.shape[:2]shifted_img = cv2.warpAffine(img, M, (width, height))cv2.imshow(\"Shifted Image\", shifted_img)cv2.waitKey(0)cv2.destroyAllWindows()
2. 图像缩放与边缘填充
2.1. 图像缩放
在 OpenCV 中,图像缩放是通过 cv2.resize() 函数实现的。通过缩放因子(如 sx
, sy
)可以改变图像的尺寸。
示例代码:
import cv2img = cv2.imread(\"image.jpg\")resized_img = cv2.resize(img, None, fx=0.5, fy=0.8) # 缩放图像cv2.imshow(\"Resized Image\", resized_img)cv2.waitKey(0)cv2.destroyAllWindows()
2.2. 边缘填充
图像变换后,空出来的区域可能会出现黑色空白,这时需要对空白区域进行边缘填充。边缘填充通常通过指定填充方法来处理。
3. 颜色空间转换与处理
3.1. RGB 转灰度
将彩色图像转换为灰度图像,通常是图像处理的第一步。OpenCV 提供了 cv2.cvtColor() 函数来进行颜色空间的转换。
示例代码:
import cv2img = cv2.imread(\"image.jpg\")gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)cv2.imshow(\"Gray Image\", gray_img)cv2.waitKey(0)cv2.destroyAllWindows()
3.2. RGB 转 HSV
HSV 颜色空间有时比 RGB 更适合进行颜色处理。HSV 空间中的 H 代表色调,S 代表饱和度,V 代表亮度。
示例代码:
import cv2img = cv2.imread(\"image.jpg\")hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)cv2.imshow(\"HSV Image\", hsv_img)cv2.waitKey(0)cv2.destroyAllWindows()
4. 图像加法与加权加法
4.1. 图像加法
OpenCV 提供了 cv2.add() 函数来对两幅图像进行加法操作。你也可以使用 numpy
来实现图像加法,但 OpenCV 会自动处理溢出。
示例代码:
import cv2import numpy as npimg1 = cv2.imread(\"image1.jpg\")img2 = cv2.imread(\"image2.jpg\")added_img = cv2.add(img1, img2)cv2.imshow(\"Added Image\", added_img)cv2.waitKey(0)cv2.destroyAllWindows()
4.2. 加权加法
加权加法通过设定不同的权重,来对两幅图像进行加权合成。使用 cv2.addWeighted() 函数可以实现这一操作。
示例代码:
import cv2img1 = cv2.imread(\"image1.jpg\")img2 = cv2.imread(\"image2.jpg\")weighted_img = cv2.addWeighted(img1, 0.7, img2, 0.3, 0)cv2.imshow(\"Weighted Added Image\", weighted_img)cv2.waitKey(0)cv2.destroyAllWindows()
5. 图像二值化处理
5.1. 阈值法
二值化是将图像中的像素值转换为只有两种颜色(通常是黑与白)的图像。在 OpenCV 中,cv2.threshold() 函数用于二值化图像。
示例代码:
import cv2img = cv2.imread(\"image.jpg\", cv2.IMREAD_GRAYSCALE)_, binary_img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)cv2.imshow(\"Binary Image\", binary_img)cv2.waitKey(0)cv2.destroyAllWindows()
5.2. 自适应阈值法
自适应阈值法根据图像的不同区域来设置阈值,适用于光照不均匀的图像。可以使用 cv2.adaptiveThreshold() 来进行自适应阈值操作。
示例代码:
import cv2img = cv2.imread(\"image.jpg\", cv2.IMREAD_GRAYSCALE)adaptive_binary_img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 2)cv2.imshow(\"Adaptive Threshold Image\", adaptive_binary_img)cv2.waitKey(0)cv2.destroyAllWindows()
6. 总结
OpenCV 是一个功能强大的图像处理库,在图像处理、计算机视觉等地方有着广泛的应用。本文详细介绍了图像翻转、仿射变换、颜色空间转换、图像加法、二值化处理等基本操作。掌握这些基本操作是深入学习 OpenCV 以及进行更复杂图像处理的基础。
希望本文能够帮助你更好地理解 OpenCV 的图像操作,并为你在计算机视觉领域的学习和开发提供帮助。如果你有更多关于图像处理的需求,可以继续探索 OpenCV 提供的高级功能,如特征提取、物体检测、深度学习集成等。