首页 > 其他分享 >opencv—常用函数学习_“干货“_总

opencv—常用函数学习_“干货“_总

时间:2024-07-14 12:25:50浏览次数:11  
标签:函数 cv2 image print 矩阵 opencv 干货 图像 np

同样内容将拆解为一份份,发在我个人博客中

http://t.csdnimg.cn/icOfX(非VIP文章),整理不易、感谢你的点赞收藏

目录

一、图像文件

1. imread:读取图像文件

2. imwrite:写入图像文件

3. imshow:显示图像

4. VideoCapture:捕获视频

二、创建Mat

1、创建Mat对象

2、操作Mat对象

三、矩阵算术运算

矩阵加法

矩阵减法

矩阵乘法

矩阵除法

四、数学运算

计算均值 (mean)

计算均值和标准差 (meanStdDev)

计算元素和 (sum)

找到最小值和最大值及其位置 (minMaxLoc)

计算非零元素的个数 (countNonZero)

计算矩阵的范数 (norm)

五、矩阵计算函数

归一化矩阵 (normalize)

转置矩阵 (transpose)

求矩阵的逆 (invert)

翻转矩阵 (flip)

旋转矩阵 (rotate)

求矩阵的行列式 (determinant)

求矩阵的迹 (trace)

求矩阵的特征值和特征向量 (eigen)

六、代数运算

矩阵加法 (add)

矩阵减法 (subtract)

矩阵乘法 (multiply)

矩阵除法 (divide)

计算绝对差 (absdiff)

按比例放大并相加 (scaleAdd)

按权重相加 (addWeighted)

七、逻辑运算

按位与操作 (bitwise_and)

按位或操作 (bitwise_or)

按位取反操作 (bitwise_not)

按位异或操作 (bitwise_xor)

八、图像拼接

水平拼接图像 (hconcat)

垂直拼接图像 (vconcat)

全景图像拼接 (Stitcher)

九、颜色通道及数据格式

转换图像的颜色空间 (cvtColor)

转换图像的数据类型 (convertTo)

分离和合并颜色通道 (split 和 merge)

提取和插入颜色通道 (extractChannel 和 insertChannel)

应用颜色映射 (applyColorMap)

十、图像复制函数

使用 clone 进行深拷贝

使用 copyTo 进行复制

使用 copyTo 和掩码进行复制

十一、图像变化与增强

缩放、计算绝对值并转换为8位 (convertScaleAbs)

计算自然对数 (log)

计算指数 (exp)

计算幂 (pow)

计算平方根 (sqrt)

直方图均衡化 (equalizeHist)

自适应直方图均衡化 (CLAHE)

细节增强 (detailEnhance)

改变光照条件 (illuminationChange)

十二、图像平滑滤波

均值滤波 (blur)

方框滤波 (boxFilter)

中值滤波 (medianBlur)

高斯滤波 (GaussianBlur)

双边滤波 (bilateralFilter)

自定义滤波器 (filter2D)

边缘保留滤波 (edgePreservingFilter)

快速非局部均值去噪 (fastNlMeansDenoising)

彩色图像的快速非局部均值去噪 (fastNlMeansDenoisingColored)

获取高斯核 (getGaussianKernel)

十三、锐化与边缘检测

Sobel算子 (Sobel)

Scharr算子 (Scharr)

Laplacian算子 (Laplacian)

Canny边缘检测器 (Canny)

获取Gabor核 (getGaborKernel)

笛卡尔坐标与极坐标转换 (cartToPolar 和 polarToCart)

十四、数学形态学

获取结构元素 (getStructuringElement)

膨胀操作 (dilate)

腐蚀操作 (erode)

高级形态学变换 (morphologyEx)

十五、图像分割

简单阈值分割 (threshold)

自适应阈值分割 (adaptiveThreshold)

颜色范围分割 (inRange)

分水岭算法 (watershed)

泛洪填充 (floodFill)

GrabCut算法 (grabCut)

距离变换 (distanceTransform)

最大稳定极值区域检测 (MSER)

均值漂移滤波 (pyrMeanShiftFiltering)

十六、连通域

计算连通组件 (connectedComponents)

计算连通组件并返回统计信息 (connectedComponentsWithStats)

解释

十七、图像轮廓

检测并绘制轮廓 (findContours 和 drawContours)

计算轮廓的周长和面积 (arcLength 和 contourArea)

计算包围轮廓的最小矩形和最小圆 (minAreaRect 和 minEnclosingCircle)

多边形逼近 (approxPolyDP)

计算轮廓的凸包 (convexHull)

用椭圆拟合轮廓 (fitEllipse)

测试点与轮廓的相对位置 (pointPolygonTest)

十八、图像大小

降采样 (pyrDown)

升采样 (pyrUp)

调整图像大小 (resize)

沿某个轴缩小图像 (reduce)

改变图像的形状 (reshape)

十九、模板匹配

从图像中提取矩形区域的子像素精度补偿 (getRectSubPix)

在图像中搜索和匹配模板 (matchTemplate)

比较两个形状(轮廓)的相似度 (matchShapes)

解释

二十、图像矩

计算图像或轮廓的矩 (moments)

计算图像或轮廓的Hu不变矩 (HuMoments)

解释

使用示例

二一、查找表变换

使用查找表对图像进行变换 (LUT)

解释

实际应用

伽马校正的示例

二二、图像积分

计算图像的积分图像 (integral)

解释

应用场景

快速计算图像块和的示例

二三、图像边界处理

使用 copyMakeBorder 添加图像边界

解释

边界类型示例

二四、图像修复

使用 inpaint 进行图像修复

解释

实际应用

去除图像中的水印示例

二五、霍夫变换

检测图像中的直线 (HoughLines)

检测图像中的直线段 (HoughLinesP)

检测图像中的圆 (HoughCircles)

解释

二六、傅里叶变化

获取最优的DFT大小 (getOptimalDFTSize)

执行离散傅里叶变换 (dft) 和 逆变换 (idft)

解释

实际应用

图像滤波示例

二七、离散余弦变换

执行离散余弦变换 (dct) 和逆变换 (idct)

解释

实际应用

JPEG压缩示例(简化版)

二八、图像几何变换

仿射变换 (warpAffine 和 getAffineTransform)

透视变换 (warpPerspective 和 getPerspectiveTransform)

旋转变换 (getRotationMatrix2D)

极坐标变换 (warpPolar 和 linearPolar)

二九、图像累加

将输入图像累加到累加图像中 (accumulate)

将输入图像加权累加到累加图像中 (accumulateWeighted)

将输入图像的平方累加到累加图像中 (accumulateSquare)

将两个输入图像的乘积累加到累加图像中 (accumulateProduct)

解释

三十、随机数与添加噪声

使用 randu 生成均匀分布的随机数并添加噪声

使用 randn 生成正态分布的随机数并添加噪声

解释

实际应用

三一、PCA

计算主成分 (PCACompute)

将数据投影到主成分空间 (project)

将数据从主成分空间反投影回原空间 (backProject)

解释

实际应用

图像压缩示例

三二、直方图

计算图像的直方图 (calcHist)

比较两个直方图的相似度 (compareHist)

计算反向投影 (calcBackProject)

解释

三三、图像特征

SIFT 特征检测和描述

ORB 特征检测和描述

Harris 角点检测

HOG 特征描述

解释

三四、机器学习

支持向量机(SVM)

K近邻算法(KNearest)

随机森林(RTrees)

朴素贝叶斯分类器(NormalBayesClassifier)

自适应增强算法(Boost)

多层感知器人工神经网络(ANN_MLP)

解释

三五、相机标定

棋盘格角点检测 (findChessboardCorners)

精确化角点位置 (cornerSubPix)

摄像机标定 (calibrateCamera)

图像畸变校正 (undistort)

单应性矩阵计算 (findHomography)

PnP 问题求解 (solvePnP)

三六、绘制几何与文本

绘制直线 (line)

绘制圆 (circle)

绘制矩形 (rectangle)

绘制椭圆 (ellipse)

绘制多边形 (polylines)

绘制箭头线 (arrowedLine)

绘制标记 (drawMarker)

绘制文本 (putText)

资料整理不易,觉得有用给个赞和搜藏吧


一、图像文件

图像文件
imread imwrite imshow VideoCapture
读取图像文件 写入图像文件 显示图像 捕获视频

1. imread:读取图像文件

作用:从文件读取图像并存储在一个矩阵(数组)中。

使用场景:当需要从磁盘加载图像进行处理或分析时。

样例代码

import cv2

# 从文件读取图像
image = cv2.imread('path_to_image.jpg')

# 检查图像是否读取成功
if image is None:
    print("图像读取失败")
else:
    print("图像读取成功")

2. imwrite:写入图像文件

作用:将图像矩阵(数组)写入到文件。

使用场景:当需要保存处理后的图像到磁盘时。

样例代码

import cv2

# 读取图像
image = cv2.imread('path_to_image.jpg')

# 处理图像(例如,转换为灰度图像)
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 将处理后的图像写入文件
cv2.imwrite('path_to_save_image.jpg', gray_image)

3. imshow:显示图像

作用:在窗口中显示图像。

使用场景:当需要在屏幕上查看图像或处理结果时。

样例代码

import cv2

# 读取图像
image = cv2.imread('path_to_image.jpg')

# 显示图像
cv2.imshow('Image', image)

# 等待按键按下
cv2.waitKey(0)

# 关闭所有窗口
cv2.destroyAllWindows()

4. VideoCapture:捕获视频

作用:从摄像头或视频文件中捕获视频流。

使用场景:当需要从摄像头获取实时视频流或从文件中读取视频进行处理时。

样例代码

import cv2

# 打开摄像头(参数0表示第一个摄像头)
cap = cv2.VideoCapture(0)

# 检查摄像头是否打开成功
if not cap.isOpened():
    print("无法打开摄像头")
else:
    while True:
        # 逐帧捕获
        ret, frame = cap.read()

        # 如果读取成功
        if ret:
            # 显示帧
            cv2.imshow('Video', frame)
            
            # 按下 'q' 键退出
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
        else:
            break

# 释放资源并关闭窗口
cap.release()
cv2.destroyAllWindows()

二、创建Mat

        在OpenCV中,Mat对象是一个强大的矩阵类型,用于表示图像和矩阵数据。下面是一些常用的构造函数和方法,用于创建和操作Mat对象。

创建Mat的构造函数
zeros ones eye
创建一个所有元素为零的矩阵 创建一个所有元素为一的矩阵 创建一个单位矩阵(对角线元素为一,其他元素为零)
操作函数
colRange rowRange Range
获取指定列范围的子矩阵 获取指定行范围的子矩阵 表示一个范围
1、创建Mat对象

创建一个所有元素为零的矩阵

import cv2
import numpy as np

# 创建一个3x3的零矩阵
zero_matrix = np.zeros((3, 3), dtype=np.uint8)
print("Zero Matrix:\n", zero_matrix)

创建一个所有元素为一的矩阵

# 创建一个3x3的全一矩阵
one_matrix = np.ones((3, 3), dtype=np.uint8)
print("One Matrix:\n", one_matrix)

创建一个单位矩阵

# 创建一个3x3的单位矩阵
eye_matrix = np.eye(3, dtype=np.uint8)
print("Eye Matrix:\n", eye_matrix)

        使用OpenCV中的函数和方法来创建和操作Mat对象。可以根据需要组合这些方法来实现复杂的图像和矩阵操作任务。

2、操作Mat对象

获取指定列范围的子矩阵

# 创建一个4x4的随机矩阵
matrix = np.random.randint(0, 256, (4, 4), dtype=np.uint8)
print("Original Matrix:\n", matrix)

# 获取第1到第3列(不包括第3列)的子矩阵
col_sub_matrix = matrix[:, 1:3]
print("Column Range Matrix:\n", col_sub_matrix)

获取指定行范围的子矩阵

# 获取第1到第3行(不包括第3行)的子矩阵
row_sub_matrix = matrix[1:3, :]
print("Row Range Matrix:\n", row_sub_matrix)

表示一个范围(在此例中用于创建子矩阵)

# 表示从第1到第3列(不包括第3列)的范围
col_range = slice(1, 3)
print("Column Range:\n", matrix[:, col_range])

# 表示从第1到第3行(不包括第3行)的范围
row_range = slice(1, 3)
print("Row Range:\n", matrix[row_range, :])

三、矩阵算术运算

        在OpenCV中,Mat对象支持基本的算术运算,这些运算可以用来对矩阵进行加法、减法、乘法和除法操作。下面分别介绍这些操作符的重载及其使用示例。

矩阵算术运算
+(加法) -(减法) *(乘法) /(除法)
对两个矩阵进行元素逐个相加 对两个矩阵进行元素逐个相减 对两个矩阵进行元素逐个相乘 对两个矩阵进行元素逐个相除
矩阵加法
import cv2
import numpy as np

# 创建两个矩阵
matrix1 = np.array([[1, 2], [3, 4]], dtype=np.uint8)
matrix2 = np.array([[5, 6], [7, 8]], dtype=np.uint8)

# 矩阵加法
result_add = cv2.add(matrix1, matrix2)
print("Addition Result:\n", result_add)
矩阵减法
# 矩阵减法
result_sub = cv2.subtract(matrix1, matrix2)
print("Subtraction Result:\n", result_sub)
矩阵乘法
# 矩阵乘法(逐元素相乘)
result_mul = cv2.multiply(matrix1, matrix2)
print("Multiplication Result:\n", result_mul)
矩阵除法
# 矩阵除法(逐元素相除)
result_div = cv2.divide(matrix1, matrix2)
print("Division Result:\n", result_div)

        通过这些示例代码,可以看到如何使用OpenCV中的操作符重载来对Mat对象进行基本的算术运算。这些运算在图像处理和矩阵计算中非常常用,可以用于各种图像增强、滤波和特征提取任务。

四、数学运算

        在OpenCV中,Mat对象提供了丰富的数学运算功能,可以方便地对矩阵进行各种统计和算术运算。下面介绍一些常用的数学运算函数及其使用示例。

数学运算
mean meanStdDev sum
计算矩阵的均值 计算矩阵的均值和标准差 计算矩阵元素的和
minMaxLoc countNonZero norm
找到矩阵中的最小值和最大值及其位置 计算矩阵中非零元素的个数 计算矩阵的范数(如L2范数)
计算均值 (mean)
import cv2
import numpy as np

# 创建一个矩阵
matrix = np.array([[1, 2], [3, 4]], dtype=np.uint8)

# 计算矩阵的均值
mean_val = cv2.mean(matrix)
print("Mean Value:", mean_val)

计算均值和标准差 (meanStdDev)
# 计算矩阵的均值和标准差
mean_val, stddev_val = cv2.meanStdDev(matrix)
print("Mean Value:", mean_val)
print("Standard Deviation:", stddev_val)
计算元素和 (sum)
# 计算矩阵元素的和
sum_val = cv2.sumElems(matrix)
print("Sum of Elements:", sum_val)
找到最小值和最大值及其位置 (minMaxLoc)
# 找到矩阵中的最小值和最大值及其位置
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(matrix)
print("Minimum Value:", min_val, "at", min_loc)
print("Maximum Value:", max_val, "at", max_loc)
计算非零元素的个数 (countNonZero)
# 计算矩阵中非零元素的个数
nonzero_count = cv2.countNonZero(matrix)
print("Number of Non-Zero Elements:", nonzero_count)
计算矩阵的范数 (norm)
# 计算矩阵的L2范数
norm_val = cv2.norm(matrix, cv2.NORM_L2)
print("L2 Norm of the Matrix:", norm_val)

        通过这些示例代码,可以了解如何使用OpenCV中的这些数学运算函数来对Mat对象进行各种统计和算术运算。这些函数在图像处理、特征提取和数据分析中非常有用。

五、矩阵计算函数

        在OpenCV中,Mat对象提供了丰富的矩阵计算功能,这些功能可以用于图像处理、机器学习、计算机视觉等领域。下面是一些常用的矩阵计算函数及其使用示例。

矩阵计算函数
normalize transpose invert flip rotate
归一化矩阵 转置矩阵 求矩阵的逆 翻转矩阵 旋转矩阵
determinant trace eigen calcCovarMatrix solve
求矩阵的行列式 求矩阵的迹 求矩阵的特征值和特征向量 计算协方差矩阵 求解线性方程组
solveCubic solvePoly SVDcompute max min
求解三次方程 求解多项式方程 奇异值分解 求矩阵元素的最大值 求矩阵元素的最小值
compare repeat PSNR cross dot
比较矩阵 重复矩阵 峰值信噪比 向量的叉乘 向量的点乘
归一化矩阵 (normalize)
import cv2
import numpy as np

# 创建一个矩阵
matrix = np.array([[1, 2], [3, 4]], dtype=np.float32)

# 归一化矩阵
normalized_matrix = cv2.normalize(matrix, None, 0, 1, cv2.NORM_MINMAX)
print("Normalized Matrix:\n", normalized_matrix)
转置矩阵 (transpose)
# 转置矩阵
transposed_matrix = cv2.transpose(matrix)
print("Transposed Matrix:\n", transposed_matrix)
求矩阵的逆 (invert)
# 创建一个可逆矩阵
invertible_matrix = np.array([[1, 2], [3, 4]], dtype=np.float32)

# 求矩阵的逆
inverse_matrix = cv2.invert(invertible_matrix)[1]
print("Inverse Matrix:\n", inverse_matrix)
翻转矩阵 (flip)
# 翻转矩阵(沿Y轴翻转)
flipped_matrix = cv2.flip(matrix, 1)
print("Flipped Matrix:\n", flipped_matrix)
旋转矩阵 (rotate)
# 翻转矩阵(沿Y轴翻转)
flipped_matrix = cv2.flip(matrix, 1)
print("Flipped Matrix:\n", flipped_matrix)
求矩阵的行列式 (determinant)
# 求矩阵的行列式
determinant_val = cv2.determinant(invertible_matrix)
print("Determinant Value:", determinant_val)
求矩阵的迹 (trace)
# 求矩阵的迹
trace_val = cv2.trace(matrix)[0]
print("Trace Value:", trace_val)
求矩阵的特征值和特征向量 (eigen)
# 求矩阵的特征值和特征向量
eig_vals, eig_vecs = cv2.eigen(invertible_matrix)
print("Eigenvalues:\n", eig_vals)
print("Eigenvectors:\n", eig_vecs)

        这些示例展示了如何使用OpenCV中的矩阵计算函数来处理Mat对象。根据具体的应用需求,可以组合这些函数来实现复杂的矩阵运算和图像处理任务。

六、代数运算

        在OpenCV中,代数运算函数用于对矩阵进行基本的代数运算。这些函数可以方便地实现加法、减法、乘法、除法等操作。下面介绍这些代数运算函数及其使用示例。

代数运算函数
add subtract multiply divide
矩阵加法 矩阵减法 矩阵乘法(逐元素相乘) 矩阵除法(逐元素相除)
absdiff scaleAdd addWeighted
计算两个矩阵的绝对差 按比例放大并相加 按权重相加
矩阵加法 (add)
import cv2
import numpy as np

# 创建两个矩阵
matrix1 = np.array([[1, 2], [3, 4]], dtype=np.uint8)
matrix2 = np.array([[5, 6], [7, 8]], dtype=np.uint8)

# 矩阵加法
result_add = cv2.add(matrix1, matrix2)
print("Addition Result:\n", result_add)
矩阵减法 (subtract)
import cv2
import numpy as np

# 创建两个矩阵
matrix1 = np.array([[1, 2], [3, 4]], dtype=np.uint8)
matrix2 = np.array([[5, 6], [7, 8]], dtype=np.uint8)

# 矩阵加法
result_add = cv2.add(matrix1, matrix2)
print("Addition Result:\n", result_add)
矩阵乘法 (multiply)
# 矩阵乘法(逐元素相乘)
result_mul = cv2.multiply(matrix1, matrix2)
print("Multiplication Result:\n", result_mul)
矩阵除法 (divide)
# 矩阵除法(逐元素相除)
result_div = cv2.divide(matrix1, matrix2)
print("Division Result:\n", result_div)
计算绝对差 (absdiff)
# 计算两个矩阵的绝对差
result_absdiff = cv2.absdiff(matrix1, matrix2)
print("Absolute Difference Result:\n", result_absdiff)

按比例放大并相加 (scaleAdd)
# 按比例放大并相加
scale = 2.5
result_scaleAdd = cv2.scaleAdd(matrix1, scale, matrix2)
print("Scale Add Result:\n", result_scaleAdd)

按权重相加 (addWeighted)
# 按权重相加
alpha = 0.7
beta = 0.3
gamma = 0  # 可选偏移量
result_addWeighted = cv2.addWeighted(matrix1, alpha, matrix2, beta, gamma)
print("Weighted Addition Result:\n", result_addWeighted)

        这些示例展示了如何使用OpenCV中的代数运算函数来对Mat对象进行各种基本的代数运算。根据具体的应用需求,可以组合这些函数来实现复杂的图像处理和矩阵计算任务。

七、逻辑运算

        在OpenCV中,逻辑运算函数用于对图像或矩阵进行像素级的逻辑操作。这些操作包括与(AND)、或(OR)、非(NOT)、异或(XOR)等。下面是这些逻辑运算函数的介绍及其使用示例。

逻辑运算函数
bitwise_and bitwise_or bitwise_not bitwise_xor
对两个矩阵进行按位与操作 对两个矩阵进行按位或操作 对矩阵进行按位取反操作 对两个矩阵进行按位异或操作
按位与操作 (bitwise_and)
import cv2
import numpy as np

# 创建两个矩阵
matrix1 = np.array([[1, 2], [3, 4]], dtype=np.uint8)
matrix2 = np.array([[5, 6], [7, 8]], dtype=np.uint8)

# 按位与操作
result_and = cv2.bitwise_and(matrix1, matrix2)
print("Bitwise AND Result:\n", result_and)
按位或操作 (bitwise_or)
# 按位或操作
result_or = cv2.bitwise_or(matrix1, matrix2)
print("Bitwise OR Result:\n", result_or)
按位取反操作 (bitwise_not)
# 按位取反操作
result_not = cv2.bitwise_not(matrix1)
print("Bitwise NOT Result:\n", result_not)
按位异或操作 (bitwise_xor)
# 按位异或操作
result_xor = cv2.bitwise_xor(matrix1, matrix2)
print("Bitwise XOR Result:\n", result_xor)

        这些示例展示了如何使用OpenCV中的逻辑运算函数来对Mat对象进行各种按位逻辑操作。这些操作在图像处理和计算机视觉中非常有用,特别是在掩模操作、图像合成和图像增强等应用中。根据具体的需求,可以灵活组合这些函数来实现复杂的图像处理任务。

八、图像拼接

        在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()

分离和合并颜色通道 (splitmerge)
# 分离颜色通道
b, g, r = cv2.split(image)

# 合并颜色通道
merged_image = cv2.merge([b, g, r])
cv2.imshow('Merged Image', merged_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
提取和插入颜色通道 (extractChannelinsertChannel)
# 提取蓝色通道
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中,图像复制是基本的操作,可以通过 clonecopyTo 函数来实现。下面介绍这些函数及其使用示例。

图像复制函数
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中的 clonecopyTo 函数来复制图像。根据具体的需求,可以选择直接复制整个图像或使用掩码复制特定区域的图像数据。这些操作在图像处理、图像增强和计算机视觉应用中非常有用。

十一、图像变化与增强

        在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中的图像变换与增强函数来处理图像。根据具体的应用需求,可以灵活运用这些函数来实现复杂的图像处理和增强任务。

十二、图像平滑滤波

        在OpenCV中,图像平滑滤波(或称为图像去噪)是一种非常常见的操作,通常用于去除图像中的噪声,使图像变得更加平滑。OpenCV提供了多种滤波函数,下面介绍这些滤波函数及其使用示例。

图像平滑滤波函数
blur boxFilter sqBoxFilter medianBlur GaussianBlur
均值滤波 方框滤波 平方方框滤波 中值滤波 高斯滤波
bilateralFilter filter2D sepFilter2D edgePreservingFilter fastNlMeansDenoising
双边滤波 自定义滤波器 分离滤波器 边缘保留滤波 快速非局部均值去噪
fastNlMeansDenoisingColored textureFlattening getGaussianKernel
彩色图像的快速非局部均值去噪 纹理平滑 获取高斯核
均值滤波 (blur)
import cv2
import numpy as np

# 读取图像
image = cv2.imread('path_to_image.jpg')

# 均值滤波
blurred_image = cv2.blur(image, (5, 5))
cv2.imshow('Blurred Image', blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
方框滤波 (boxFilter)
# 方框滤波
box_filtered_image = cv2.boxFilter(image, -1, (5, 5))
cv2.imshow('Box Filtered Image', box_filtered_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
中值滤波 (medianBlur)
# 中值滤波
median_blurred_image = cv2.medianBlur(image, 5)
cv2.imshow('Median Blurred Image', median_blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
高斯滤波 (GaussianBlur)
# 高斯滤波
gaussian_blurred_image = cv2.GaussianBlur(image, (5, 5), 0)
cv2.imshow('Gaussian Blurred Image', gaussian_blurred_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
双边滤波 (bilateralFilter)
# 双边滤波
bilateral_filtered_image = cv2.bilateralFilter(image, 9, 75, 75)
cv2.imshow('Bilateral Filtered Image', bilateral_filtered_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
自定义滤波器 (filter2D)
# 自定义滤波器
kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]])
custom_filtered_image = cv2.filter2D(image, -1, kernel)
cv2.imshow('Custom Filtered Image', custom_filtered_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
边缘保留滤波 (edgePreservingFilter)
# 边缘保留滤波
edge_preserved_image = cv2.edgePreservingFilter(image, flags=1, sigma_s=60, sigma_r=0.4)
cv2.imshow('Edge Preserved Image', edge_preserved_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
快速非局部均值去噪 (fastNlMeansDenoising)
# 快速非局部均值去噪
denoised_image = cv2.fastNlMeansDenoising(image, None, 30, 7, 21)
cv2.imshow('Denoised Image', denoised_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
彩色图像的快速非局部均值去噪 (fastNlMeansDenoisingColored)
# 彩色图像的快速非局部均值去噪
denoised_colored_image = cv2.fastNlMeansDenoisingColored(image, None, 30, 30, 7, 21)
cv2.imshow('Denoised Colored Image', denoised_colored_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
获取高斯核 (getGaussianKernel)
# 获取高斯核
gaussian_kernel = cv2.getGaussianKernel(5, 1.5)
print("Gaussian Kernel:\n", gaussian_kernel)

        这些示例展示了如何使用OpenCV中的各种平滑滤波函数来处理图像。根据具体的应用需求,可以灵活运用这些函数来实现复杂的图像平滑和去噪任务。

十三、锐化与边缘检测

        在OpenCV中,锐化与边缘检测是图像处理的重要任务之一,用于检测图像中的边缘和细节。下面介绍一些常用的锐化与边缘检测函数及其使用示例。

锐化与边缘检测函数
Sobel Scharr Laplacian spatialGradient
Sobel算子,用于计算图像的梯度 Scharr算子,Sobel算子的增强版本

标签:函数,cv2,image,print,矩阵,opencv,干货,图像,np
From: https://blog.csdn.net/chen_0717/article/details/140375572

相关文章

  • 函数调用栈
    1、程序源代码:[xuanmiao@localhostPractice]$catmain.c#include<stdio.h>intplus(inta,intb){intc=a+b;returnc;}intmain(){inta=1,b=2;intc=0;c=plus(a,b);return0;}2、编译[xuanmiao@localhostPractice......
  • 深入解析C++中的特殊成员函数:构造函数、析构函数、拷贝构造函数与赋值操作符
    深入解析C++中的特殊成员函数:构造函数、析构函数、拷贝构造函数与赋值操作符在C++编程的浩瀚宇宙中,构造函数、析构函数、拷贝构造函数和赋值操作符是构成对象生命周期和行为的四大基石。它们各自扮演着不可或缺的角色,确保了对象从创建到销毁,从复制到赋值的整个过程既安全又......
  • 【postgresql】时间函数和操作符
    日期/时间操作符加减操作符:+ 和 - 可以用于日期、时间、时间戳和时间间隔的加减操作。SELECT'2024-01-01'::date+INTERVAL'1day'as"date";;--结果:2024-01-02SELECT'2024-01-0112:00:00'::timestamp-INTERVAL'2hours'as"timestamp......
  • 实变函数精解【4】
    文章目录说明点集与测度可数集定义性质示例与有限集的关系应用可列集定义种类不可列集性质应用与意义有限集性质示例与无限集的区别应用可数集(Countableset)和可列集(Countablyinfiniteset或Enumerableset)可数集可列集等同性注意事项开集的极限点集定义与解释开......
  • isinstance() 函数
    isinstance()函数来判断一个对象是否是一个已知的类型,类似type()。isinstance()与type()区别:type()不会认为子类是一种父类类型,不考虑继承关系。isinstance()会认为子类是一种父类类型,考虑继承关系。如果要判断两个类型是否相同推荐使用isinstance()。语法isins......
  • Go新手容易踩的坑(函数与方法)
    方法的接收器——对象接收器与指针接收器对象接收器不会更新属性 packagetestsimport("fmt""testing")typeConsumerstruct{Balanceint64}//对象接收器func(cConsumer)add(vint64){c.Balance+=v}funcTestT1(t*testing.T){......
  • 【价格型需求响应】基于Logistic函数的负荷转移率模型需求响应研究(Matlab代码实现)
     ......
  • opencv中 在特征点匹配代码举例,以及queryIdx和trainIdx的用法
    一、用法在特征点匹配中,queryIdx和trainIdx是匹配对中的两个索引,用于指示匹配点在不同图像或特征向量中的位置。1.假设我们有两幅图像A和B,并使用特征点提取算法(如SIFT)从它们中提取出特征点和对应的描述子。2.在进行特征点匹配时,我们得到了一个匹配对,其中包含了两个特征点:特征点A......
  • Android C++系列:Linux常用函数和工具
    1.时间函数1.1文件访问时间#include<sys/types.h>#include<utime.h>intutime(constchar*name,conststructutimebuf*t);返回:若成功则为0,若出错则为-1如果times是一个空指针,则存取时间和修改时间两者都设置为当前时间;如果times是非空指针,则存取时......
  • 定积分之奇偶函数公式
    brief若\(f(x)\)在\([-a,a]\)上连续且为偶函数,则:\[\int_{-a}^{a}f(x)dx=2\int_{0}^{a}f(x)dx\]若\(f(x)\)在\([-a,a]\)上连续且为奇函数,则:\[\int_{-a}^{a}f(x)dx=0\]proveinvoke:定积分的性质Part0\[\begin{align}根据定积分的性质2:\\\int_{-a}^{a}f(x......