目录
提取和插入颜色通道 (extractChannel 和 insertChannel)
缩放、计算绝对值并转换为8位 (convertScaleAbs)
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中的图像变换与增强函数来处理图像。根据具体的应用需求,可以灵活运用这些函数来实现复杂的图像处理和增强任务。