opencv库中的函数应用

opencv库中的函数应用

二值化函数

复制代码
函数:cv2.threshold(img, thresh, maxVal, thresholdType)

功能

将一个灰度图变为二值图像(即由0-255变为0-1)

实现方式:选取全局阈值,将整幅图像分成二值图像。如果像素值大于阈值,则为其分配0或者1,否则为其分配另一个值

参数

img:灰度图

thresh:阈值

maxVal:最大值(也有可能是最小值看,参数四的分割方式)

thresholdType:分割方式主要包括

  • cv2.THRESH_BINARY:如果像素值大于阈值,则将其设置为最大值;否则,将其设置为0。
  • cv2.THRESH_BINARY_INV:如果像素值大于阈值,则将其设置为0;否则,将其设置为最大值。
  • cv2.THRESH_TRUNC:如果像素值大于阈值,则将其设置为阈值;否则,保持不变。
  • cv2.THRESH_TOZERO:如果像素值大于阈值,则保持不变;否则,将其设置为0。
  • cv2.THRESH_TOZERO_INV:如果像素值大于阈值,则将其设置为0;否则,保持不变。

返回值

分割后的图像

应用

抠图,可以通过该方法选择出自己需要的图像

例子

python 复制代码
import cv2
import matplotlib.pyplot as plt
ret,thresh1 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)
plt.subplot(121)
plt.imshow(img_gray,cmap='gray')
plt.subplot(122)
plt.imshow(thresh1,cmap='gray')

自适应二值化函数

函数

dst = cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)

功能

将一个灰度图变为二值图像(即由0-255变为0-1)

实现方式:自动选取全局阈值,将整幅图像分成二值图像。如果像素值大于阈值,则为其分配0或者1,否则为其分配另一个值

参数

src:输入图像,应该是灰度图像。

maxValue:当像素值大于(或小于,取决于阈值类型)阈值时,所赋予的最大值。

adaptiveMethod:自适应阈值方法,有两种选择:

cv2.ADAPTIVE_THRESH_MEAN_C:使用邻域块的平均值作为阈值。

cv2.ADAPTIVE_THRESH_GAUSSIAN_C:使用邻域块的加权和作为阈值,权重由高斯窗口确定。

thresholdType:阈值类型,决定了如何应用阈值。常见的类型有:

cv2.THRESH_BINARY:如果像素值大于阈值,则将其设置为最大值;否则,将其设置为0。

cv2.THRESH_BINARY_INV:如果像素值大于阈值,则将其设置为0;否则,将其设置为最大值。

blockSize:邻域块的大小,必须是奇数。

C:一个常数,用于调整阈值。通常设置为0。

返回值

返回图案

应用

例子

python 复制代码
img=cv2.imread("imge.jpg",0)
th2 = cv2.adaptiveThreshold(
    img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 4)
th3 = cv2.adaptiveThreshold(
    img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 17, 6)
th4 = cv2.adaptiveThreshold(
    img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 3, 6)
plt.subplot(141), plt.imshow(img, cmap='gray')
plt.subplot(142), plt.imshow(th2, cmap='gray')
plt.subplot(143), plt.imshow(th3, cmap='gray')
plt.subplot(144), plt.imshow(th4, cmap='gray')
plt.show()

腐蚀函数

dst = cv2.erode(src, kernel, iterations)

功能

主要用于消除图像中的噪声和细小物体。

参数

src:输入图像。

kernel:腐蚀操作的核,通常是一个小的矩形或椭圆形结构元素。

iterations:腐蚀操作的迭代次数,默认为1。

返回值:

返回值

返回处理后的图案

应用

消除图案中的噪声

例子

python 复制代码
ret = np.ones((5,5), dtype=np.uint8)
img=cv2.imread("sudoku.jpg",0)
ret = np.ones((5,5),dtype=np.uint8)
# dilation = cv2.dilate(img, ret)  
erosion = cv2.erode(img, ret)
# dil = cv2.cvtColor(dilation, cv2.COLOR_BGR2RGB)
ero = cv2.cvtColor(erosion, cv2.COLOR_BGR2RGB)
plt.subplot(121)
plt.imshow(img, cmap='gray')
plt.title('Original Image')
plt.axis('off')
plt.subplot(122)
plt.imshow(ero, cmap='gray')
plt.title('Eroded Image')
plt.axis('off')
plt.show()

膨胀函数

dst = cv2.dilate(src, kernel, iterations)

功能

用于扩大图像中的白色区域(高亮部分

参数

src:输入图像。

kernel:膨胀操作的核,通常是一个小的矩形或椭圆形结构元素。

iterations:膨胀操作的迭代次数,默认为1。

返回值

处理后的图案

例子

python 复制代码
ret = np.ones((5,5), dtype=np.uint8)
img=cv2.imread("sudoku.jpg",0)
ret = np.ones((5,5),dtype=np.uint8)
dilation = cv2.dilate(img, ret)  
# erosion = cv2.erode(img, ret)
dil = cv2.cvtColor(dilation, cv2.COLOR_BGR2RGB)
# ero = cv2.cvtColor(erosion, cv2.COLOR_BGR2RGB)
plt.subplot(121)
plt.imshow(img, cmap='gray')
plt.title('Original Image')
plt.axis('off')
plt.subplot(122)
plt.imshow(dil, cmap='gray')
plt.title('Eroded Image')
plt.axis('off')
plt.show()

仿射变换函数

dst = cv2.warpAffine(src, M, dsize, flags, borderMode, borderValue)

功能

进行变换,保持二维平面上的直线和平行线

参数

src:输入图像。

M:2x3的仿射变换矩阵。

dsize:输出图像的大小。

flags:插值方法,默认为 cv2.INTER_LINEAR。

borderMode:边界像素模式,默认为 cv2.BORDER_CONSTANT。

borderValue:边界值,默认为0。

返回值

处理后的图案## 应用

例子

python 复制代码
import cv2
import numpy as np
# 读取灰度图像
img = cv2.imread('sudoku.jpg', 0)
# 创建仿射变换矩阵
M = np.float32([[1, 0, 100], [0, 1, 50]])
# 应用仿射变换
affine = cv2.warpAffine(img, M, (img.shape[1], img.shape[0]))
# 显示结果
plt.subplot(121)
plt.imshow(img, cmap='gray')
plt.title('Original Image')
plt.axis('off')
plt.subplot(122)
plt.imshow(affine, cmap='gray')
plt.title('Eroded Image')
plt.axis('off')
plt.show()

透视变换函数

dst = cv2.warpPerspective(src, M, dsize, flags, borderMode, borderValue)

功能

将图像投影到一个新的视点

参数

src:输入图像。

M:3x3的透视变换矩阵。

dsize:输出图像的大小。

flags:插值方法,默认为 cv2.INTER_LINEAR。

borderMode:边界像素模式,默认为 cv2.BORDER_CONSTANT。

borderValue:边界值,默认为0。

返回值

变换后的图案

例子

python 复制代码
import cv2
import numpy as np

# 读取灰度图像
img = cv2.imread('sudoku.jpg', 0)

# 创建透视变换矩阵
M = np.float32([[1, 0, 100], [0, 1, 50], [0, 0, 1]])

# 应用透视变换
perspective = cv2.warpPerspective(img, M, (img.shape[1], img.shape[0]))

# 显示结果
plt.subplot(121)
plt.imshow(img, cmap='gray')
plt.title('Original Image')
plt.axis('off')
plt.subplot(122)
plt.imshow(perspective, cmap='gray')
plt.title('Eroded Image')
plt.axis('off')
plt.show()
相关推荐
知乎的哥廷根数学学派13 分钟前
面向可信机械故障诊断的自适应置信度惩罚深度校准算法(Pytorch)
人工智能·pytorch·python·深度学习·算法·机器学习·矩阵
且去填词24 分钟前
DeepSeek :基于 Schema 推理与自愈机制的智能 ETL
数据仓库·人工智能·python·语言模型·etl·schema·deepseek
人工干智能36 分钟前
OpenAI Assistants API 中 client.beta.threads.messages.create方法,兼谈一星*和两星**解包
python·llm
databook44 分钟前
当条形图遇上极坐标:径向与圆形条形图的视觉革命
python·数据分析·数据可视化
阿部多瑞 ABU1 小时前
`chenmo` —— 可编程元叙事引擎 V2.3+
linux·人工智能·python·ai写作
acanab1 小时前
VScode python插件
ide·vscode·python
知乎的哥廷根数学学派2 小时前
基于生成对抗U-Net混合架构的隧道衬砌缺陷地质雷达数据智能反演与成像方法(以模拟信号为例,Pytorch)
开发语言·人工智能·pytorch·python·深度学习·机器学习
WangYaolove13142 小时前
Python基于大数据的电影市场预测分析(源码+文档)
python·django·毕业设计·源码
知乎的哥廷根数学学派3 小时前
基于自适应多尺度小波核编码与注意力增强的脉冲神经网络机械故障诊断(Pytorch)
人工智能·pytorch·python·深度学习·神经网络·机器学习
wyw00003 小时前
目标检测之Faster R-CNN
计算机视觉