人工智能-python-OpenCV 图像基础认知与运用-图像的预处理(1)

文章目录

  • [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 提供的高级功能,如特征提取、物体检测、深度学习集成等。

相关推荐
xw33734095642 分钟前
OpenCV 图像变换全解析:从镜像翻转到仿射变换的实践指南
人工智能·python·opencv·计算机视觉·pycharm
点云SLAM3 分钟前
Pytorch中cuda相关操作详见和代码示例
人工智能·pytorch·python·深度学习·3d·cuda·多gpu训练
静心问道40 分钟前
DeepSpeed-FastGen:通过 MII 和 DeepSpeed-Inference 实现大语言模型的高吞吐文本生成
人工智能·模型加速·ai技术应用
过往入尘土41 分钟前
matplotlib的详细知识点
python
overFitBrain1 小时前
数据结构-5(二叉树)
开发语言·数据结构·python
雪碧聊技术1 小时前
CPU(中央处理器)和GPU(图形处理器)的区别
人工智能·cpu·gpu·中央处理器·图形处理器
IMER SIMPLE1 小时前
人工智能-python-OpenCV图像处理核心技术:梯度计算、边缘检测与轮廓分析详解
人工智能·python·opencv
Luis Li 的猫猫1 小时前
光纤多波长解释
网络·人工智能
被放养的研究生1 小时前
MMAction2-1.2.0文档
人工智能
程序员NEO1 小时前
我只说需求,AI 全程托管,代码自己长出来了!
人工智能·后端