文章目录
- [OpenCV 图像基础认知与运用](#OpenCV 图像基础认知与运用)
-
- [1. 图像翻转与仿射变换](#1. 图像翻转与仿射变换)
- [2. 图像缩放与边缘填充](#2. 图像缩放与边缘填充)
-
- [2.1. 图像缩放](#2.1. 图像缩放)
- [2.2. 边缘填充](#2.2. 边缘填充)
- [3. 颜色空间转换与处理](#3. 颜色空间转换与处理)
- [4. 图像加法与加权加法](#4. 图像加法与加权加法)
- [5. 图像二值化处理](#5. 图像二值化处理)
- [6. 总结](#6. 总结)
OpenCV 图像基础认知与运用
OpenCV 是一个开源的计算机视觉库,广泛应用于图像处理和计算机视觉领域。本文将详细介绍 OpenCV 中图像的基础认知与常见运用,包括图像的基本操作、仿射变换、颜色空间转换、图像加法、二值化处理等内容。了解这些基础知识将有助于你更好地掌握 OpenCV 及其应用。
1. 图像翻转与仿射变换
1.1. 图像翻转
在 OpenCV 中,图像翻转是指对图像进行镜像处理。翻转操作是基于图像中心进行的。
cv2.flip() 函数用于执行图像翻转。参数说明如下:
-
img:要翻转的图像。
-
flipcode:指定翻转类型:
- 0:垂直翻转(上下翻转)。
- >0:水平翻转(左右翻转)。
- <0:同时水平和垂直翻转。
示例代码:
python
import cv2
img = 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,该矩阵是根据给定的变换(如平移、旋转、缩放等)计算得到的。
示例代码:
python
import numpy as np
import cv2
img = 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
)可以改变图像的尺寸。
示例代码:
python
import cv2
img = 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() 函数来进行颜色空间的转换。
示例代码:
python
import cv2
img = 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 代表亮度。
示例代码:
python
import cv2
img = 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 会自动处理溢出。
示例代码:
python
import cv2
import numpy as np
img1 = 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() 函数可以实现这一操作。
示例代码:
python
import cv2
img1 = 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() 函数用于二值化图像。
示例代码:
python
import cv2
img = 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() 来进行自适应阈值操作。
示例代码:
python
import cv2
img = 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 提供的高级功能,如特征提取、物体检测、深度学习集成等。