目录
八、图像拼接
水平拼接图像 (hconcat)
垂直拼接图像 (vconcat)
全景图像拼接 (Stitcher)
九、颜色通道及数据格式
转换图像的颜色空间 (cvtColor)
转换图像的数据类型 (convertTo)
分离和合并颜色通道 (split 和 merge)
提取和插入颜色通道 (extractChannel 和 insertChannel)
应用颜色映射 (applyColorMap)
十、图像复制函数
使用 clone 进行深拷贝
使用 copyTo 进行复制
使用 copyTo 和掩码进行复制
十一、图像变化与增强
缩放、计算绝对值并转换为8位 (convertScaleAbs)
计算自然对数 (log)
计算指数 (exp)
计算幂 (pow)
计算平方根 (sqrt)
直方图均衡化 (equalizeHist)
自适应直方图均衡化 (CLAHE)
细节增强 (detailEnhance)
改变光照条件 (illuminationChange)
http://t.csdnimg.cn/i8pqt —— opencv—常用函数学习_“干货“_总(VIP)
散的正在一部分一部分发,不需要VIP。
资料整理不易,有用话给个赞和收藏吧。
八、图像拼接
在OpenCV中,图像拼接是指将多幅图像合并成一幅图像的过程。OpenCV提供了几种常用的函数和类来实现图像拼接。下面介绍这些拼接相关的函数及其使用示例。
图像拼接函数 | ||
hconcat | vconcat | Stitcher |
水平拼接图像 | 垂直拼接图像 | 全景图像拼接类 |
水平拼接图像 (hconcat
)
import cv2
import numpy as np
# 创建两个示例图像
image1 = np.full((100, 200, 3), 255, dtype=np.uint8) # 白色图像
image2 = np.full((100, 200, 3), 0, dtype=np.uint8) # 黑色图像
# 水平拼接图像
result_hconcat = cv2.hconcat([image1, image2])
cv2.imshow('Horizontal Concatenation', result_hconcat)
cv2.waitKey(0)
cv2.destroyAllWindows()
垂直拼接图像 (vconcat
)
# 垂直拼接图像
result_vconcat = cv2.vconcat([image1, image2])
cv2.imshow('Vertical Concatenation', result_vconcat)
cv2.waitKey(0)
cv2.destroyAllWindows()
全景图像拼接 (Stitcher
)
# 读取待拼接的图像
image1 = cv2.imread('image1.jpg')
image2 = cv2.imread('image2.jpg')
# 创建Stitcher对象并进行拼接
stitcher = cv2.Stitcher_create()
status, stitched = stitcher.stitch([image1, image2])
if status == cv2.Stitcher_OK:
cv2.imshow('Stitched Image', stitched)
cv2.waitKey(0)
cv2.destroyAllWindows()
else:
print("拼接失败")
这些示例展示了如何使用OpenCV中的拼接函数来实现图像的水平拼接、垂直拼接以及全景图像拼接。这些函数和类在图像处理、计算机视觉以及图像分析中非常有用,可以根据具体需求灵活应用。
九、颜色通道及数据格式
在OpenCV中,颜色通道及数据格式的转换和操作是图像处理的重要部分。下面介绍这些相关的函数及其使用示例。
颜色通道及数据格式 | |||
cvtColor | convertTo | split | merge |
转换图像的颜色空间 | 转换图像的数据类型 | 分离图像的颜色通道 | 合并图像的颜色通道 |
extractChannel | insertChannel | applyColorMap | |
提取单个颜色通道 | 插入单个颜色通道 | 应用颜色映射 |
转换图像的颜色空间 (cvtColor
)
import cv2
import numpy as np
# 读取图像
image = cv2.imread('path_to_image.jpg')
# 转换为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow('Gray Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
转换图像的数据类型 (convertTo
)
# 转换数据类型为float32
float_image = np.float32(image)
converted_image = float_image / 255.0
cv2.imshow('Converted Image', converted_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
分离和合并颜色通道 (split
和 merge
)
# 分离颜色通道
b, g, r = cv2.split(image)
# 合并颜色通道
merged_image = cv2.merge([b, g, r])
cv2.imshow('Merged Image', merged_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
提取和插入颜色通道 (extractChannel
和 insertChannel
)
# 提取蓝色通道
blue_channel = cv2.extractChannel(image, 0)
cv2.imshow('Blue Channel', blue_channel)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 插入通道
new_image = cv2.insertChannel(blue_channel, image, 1)
cv2.imshow('Image with Inserted Channel', new_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
应用颜色映射 (applyColorMap
)
# 应用颜色映射
color_mapped_image = cv2.applyColorMap(gray_image, cv2.COLORMAP_JET)
cv2.imshow('Color Mapped Image', color_mapped_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
这些示例展示了如何使用OpenCV中的函数来处理图像的颜色通道和数据格式。根据具体的应用需求,可以灵活运用这些函数来实现复杂的图像处理任务。
十、图像复制函数
在OpenCV中,图像复制是基本的操作,可以通过 clone
和 copyTo
函数来实现。下面介绍这些函数及其使用示例。
图像复制函数 | |
clone | copyTo |
创建一个图像的深拷贝 | 将图像数据复制到另一个矩阵,可以选择性地使用掩码 |
使用 clone
进行深拷贝
import cv2
import numpy as np
# 读取图像
image = cv2.imread('path_to_image.jpg')
# 使用 clone 进行深拷贝
cloned_image = image.clone()
# 显示原图和拷贝图
cv2.imshow('Original Image', image)
cv2.imshow('Cloned Image', cloned_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
使用 copyTo
进行复制
# 创建一个与原图像相同大小的空图像
copy_image = np.zeros_like(image)
# 直接复制图像
image.copyTo(copy_image)
# 显示原图和拷贝图
cv2.imshow('Original Image', image)
cv2.imshow('Copy Image', copy_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
使用 copyTo
和掩码进行复制
# 创建一个掩码
mask = np.zeros(image.shape[:2], dtype=np.uint8)
mask[50:150, 50:150] = 255 # 在掩码上定义一个区域
# 复制图像中的特定区域
masked_copy = np.zeros_like(image)
image.copyTo(masked_copy, mask=mask)
# 显示原图、掩码和掩码复制图
cv2.imshow('Original Image', image)
cv2.imshow('Mask', mask)
cv2.imshow('Masked Copy Image', masked_copy)
cv2.waitKey(0)
cv2.destroyAllWindows()
这些示例展示了如何使用OpenCV中的 clone
和 copyTo
函数来复制图像。根据具体的需求,可以选择直接复制整个图像或使用掩码复制特定区域的图像数据。这些操作在图像处理、图像增强和计算机视觉应用中非常有用。
十一、图像变化与增强
在OpenCV中,图像变换与增强是图像处理的重要组成部分。下面介绍一些常用的图像变换与增强函数及其使用示例。
图像变换与增强函数 | ||||
convertScaleAbs | log | exp | pow | sqrt |
缩放、计算绝对值并转换为8位 | 计算每个元素的自然对数 | 计算每个元素的指数 | 计算每个元素的幂 | 计算每个元素的平方根 |
equalizeHist | CLAHE | detailEnhance | illuminationChange | |
直方图均衡化 | 自适应直方图均衡化(对比度受限的自适应直方图均衡化) | 细节增强 | 改变光照条件 |
缩放、计算绝对值并转换为8位 (convertScaleAbs
)
import cv2
import numpy as np
# 读取图像
image = cv2.imread('path_to_image.jpg', cv2.IMREAD_GRAYSCALE)
# 缩放、计算绝对值并转换为8位
scaled_image = cv2.convertScaleAbs(image, alpha=1.5, beta=0)
cv2.imshow('Scaled Image', scaled_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
计算自然对数 (log
)
# 计算每个元素的自然对数
log_image = cv2.log(np.float32(image) + 1) # 加1防止对数的负无穷
cv2.imshow('Log Image', cv2.convertScaleAbs(log_image))
cv2.waitKey(0)
cv2.destroyAllWindows()
计算指数 (exp
)
# 计算每个元素的指数
exp_image = cv2.exp(np.float32(image))
cv2.imshow('Exp Image', cv2.convertScaleAbs(exp_image))
cv2.waitKey(0)
cv2.destroyAllWindows()
计算幂 (pow
)
# 计算每个元素的幂
pow_image = cv2.pow(np.float32(image), 2)
cv2.imshow('Pow Image', cv2.convertScaleAbs(pow_image))
cv2.waitKey(0)
cv2.destroyAllWindows()
计算平方根 (sqrt
)
# 计算每个元素的平方根
sqrt_image = cv2.sqrt(np.float32(image))
cv2.imshow('Sqrt Image', cv2.convertScaleAbs(sqrt_image))
cv2.waitKey(0)
cv2.destroyAllWindows()
直方图均衡化 (equalizeHist
)
# 直方图均衡化
equalized_image = cv2.equalizeHist(image)
cv2.imshow('Equalized Image', equalized_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
自适应直方图均衡化 (CLAHE
)
# 创建CLAHE对象
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
# 应用CLAHE
clahe_image = clahe.apply(image)
cv2.imshow('CLAHE Image', clahe_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
细节增强 (detailEnhance
)
# 细节增强
detail_image = cv2.detailEnhance(image)
cv2.imshow('Detail Enhanced Image', detail_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
改变光照条件 (illuminationChange
)
# 改变光照条件
illum_image = cv2.illuminationChange(image, mask=np.ones(image.shape, dtype=np.uint8), alpha=0.5, beta=2)
cv2.imshow('Illumination Changed Image', illum_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
这些示例展示了如何使用OpenCV中的图像变换与增强函数来处理图像。根据具体的应用需求,可以灵活运用这些函数来实现复杂的图像处理和增强任务。