好的,各位观众,欢迎来到今天的“OpenCV cv2
模块:高级图像处理与计算机视觉算法实现”讲座!今天咱们不讲虚的,直接上干货,用代码说话,保证让大家听得懂,学得会,还能乐得开怀。
首先,咱们得明确一个概念,cv2
模块是 OpenCV 库在 Python 中的接口,它就像一个神通广大的工具箱,里面装满了各种图像处理和计算机视觉的利器。
第一部分:图像基础操作,让图片“听话”
图像处理,顾名思义,就是对图像进行各种操作,让它变得更符合我们的需求。这就像给图片“化妆”,让它更漂亮,或者让它更“懂事”,能告诉我们更多信息。
-
读取和显示图像:你好,世界!
这是任何图像处理的起点,就像编程界的“Hello, World!”。
import cv2 # 读取图像 img = cv2.imread('your_image.jpg') # 替换为你的图像路径 # 检查图像是否成功加载 if img is None: print("Error: Could not load image.") else: # 显示图像 cv2.imshow('Image', img) cv2.waitKey(0) # 等待键盘按下任意键 cv2.destroyAllWindows() # 关闭所有窗口
这段代码很简单,
cv2.imread()
函数负责读取图像,cv2.imshow()
函数负责显示图像。cv2.waitKey(0)
确保图像窗口不会一闪而过,而是会一直显示,直到你按下键盘上的任意键。cv2.destroyAllWindows()
会关闭所有打开的窗口,释放资源。注意事项:
- 确保你的图像文件存在,并且路径正确。
- OpenCV 默认读取的图像颜色通道顺序是 BGR(蓝绿红),而不是 RGB(红绿蓝)。如果你需要将其转换为 RGB,可以使用
cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
。
-
图像色彩空间转换:变色龙的秘密
图像的色彩空间有很多种,比如 RGB、HSV、GRAY 等。不同的色彩空间在不同的应用场景下有不同的优势。
- RGB (Red, Green, Blue): 最常见的色彩空间,用红、绿、蓝三个分量表示颜色。
- HSV (Hue, Saturation, Value): 更符合人类视觉感知的色彩空间,用色调、饱和度、亮度三个分量表示颜色。
- GRAY: 灰度图像,只有一个亮度分量,常用于图像预处理。
import cv2 img = cv2.imread('your_image.jpg') # 转换为灰度图像 gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.imshow('Gray Image', gray_img) # 转换为 HSV 图像 hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) cv2.imshow('HSV Image', hsv_img) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.cvtColor()
函数可以实现色彩空间之间的转换。cv2.COLOR_BGR2GRAY
表示从 BGR 转换为灰度,cv2.COLOR_BGR2HSV
表示从 BGR 转换为 HSV。 -
图像裁剪和缩放:瘦身与拉伸
裁剪图像可以截取图像的感兴趣区域 (ROI),缩放图像可以改变图像的大小。
import cv2 img = cv2.imread('your_image.jpg') # 裁剪图像 (从 (100, 100) 到 (300, 400)) cropped_img = img[100:400, 100:300] cv2.imshow('Cropped Image', cropped_img) # 缩放图像 (缩放到 500x500 像素) resized_img = cv2.resize(img, (500, 500)) cv2.imshow('Resized Image', resized_img) # 缩放图像 (使用插值方法,例如双线性插值) resized_img_linear = cv2.resize(img, (500, 500), interpolation=cv2.INTER_LINEAR) cv2.imshow('Resized Image (Linear)', resized_img_linear) cv2.waitKey(0) cv2.destroyAllWindows()
- 图像裁剪使用数组切片的方式,
img[y1:y2, x1:x2]
表示截取图像的 (x1, y1) 到 (x2, y2) 区域。 -
cv2.resize()
函数可以缩放图像,第一个参数是图像,第二个参数是目标大小,interpolation
参数指定插值方法。常用的插值方法有:cv2.INTER_LINEAR
:双线性插值,速度快,效果较好。cv2.INTER_AREA
:区域插值,适用于图像缩小。cv2.INTER_CUBIC
:三次样条插值,效果最好,但速度较慢。cv2.INTER_LANCZOS4
:Lanczos 插值,效果也比较好,速度较慢。
- 图像裁剪使用数组切片的方式,
第二部分:图像滤波,让图片更“光滑”
图像滤波是一种常用的图像处理技术,可以用来去除图像噪声,平滑图像,或者增强图像的某些特征。
-
均值滤波:模糊大师
均值滤波是一种线性滤波器,它用图像中每个像素周围邻域的平均值来代替该像素的值。
import cv2 img = cv2.imread('your_image.jpg') # 均值滤波 (使用 5x5 的核) blur_img = cv2.blur(img, (5, 5)) cv2.imshow('Blur Image', blur_img) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.blur()
函数可以实现均值滤波,第二个参数是核的大小,表示邻域的大小。核越大,图像越模糊。 -
高斯滤波:柔和的模糊
高斯滤波也是一种线性滤波器,它使用高斯函数作为权重来计算邻域的平均值。高斯滤波比均值滤波更柔和,更能保留图像的细节。
import cv2 img = cv2.imread('your_image.jpg') # 高斯滤波 (使用 5x5 的核,标准差为 0) gaussian_img = cv2.GaussianBlur(img, (5, 5), 0) cv2.imshow('Gaussian Image', gaussian_img) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.GaussianBlur()
函数可以实现高斯滤波,第三个参数是标准差,表示高斯函数的宽度。标准差越大,图像越模糊。如果标准差为 0,则 OpenCV 会自动计算标准差。 -
中值滤波:噪声克星
中值滤波是一种非线性滤波器,它用图像中每个像素周围邻域的中值来代替该像素的值。中值滤波对椒盐噪声 (salt and pepper noise) 有很好的去除效果。
import cv2 img = cv2.imread('your_image.jpg') # 中值滤波 (使用 5x5 的核) median_img = cv2.medianBlur(img, 5) cv2.imshow('Median Image', median_img) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.medianBlur()
函数可以实现中值滤波,第二个参数是核的大小,必须是奇数。 -
双边滤波:磨皮神器
双边滤波是一种非线性滤波器,它在考虑像素空间距离的同时,也考虑像素值之间的差异。双边滤波可以在去除噪声的同时,保留图像的边缘信息。
import cv2 img = cv2.imread('your_image.jpg') # 双边滤波 (参数分别为:图像,邻域直径,颜色标准差,空间标准差) bilateral_img = cv2.bilateralFilter(img, 9, 75, 75) cv2.imshow('Bilateral Image', bilateral_img) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.bilateralFilter()
函数可以实现双边滤波。参数说明:d
: 邻域直径。sigmaColor
: 颜色标准差,用于控制颜色相似度。sigmaSpace
: 空间标准差,用于控制空间距离。
双边滤波的参数需要仔细调整,才能达到最佳效果。
第三部分:边缘检测,让轮廓显现
边缘是图像中像素值发生剧烈变化的地方,边缘检测可以用来提取图像的轮廓信息。
-
Sobel 算子:梯度显形记
Sobel 算子是一种基于图像梯度的一阶微分算子,可以用来检测图像的水平和垂直边缘。
import cv2 img = cv2.imread('your_image.jpg', cv2.IMREAD_GRAYSCALE) # 灰度图像 # Sobel 算子 (计算水平方向的梯度) sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3) # Sobel 算子 (计算垂直方向的梯度) sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3) # 将梯度值转换为绝对值,并转换为 8 位无符号整数 abs_sobelx = cv2.convertScaleAbs(sobelx) abs_sobely = cv2.convertScaleAbs(sobely) # 合并水平和垂直方向的梯度 sobelxy = cv2.addWeighted(abs_sobelx, 0.5, abs_sobely, 0.5, 0) cv2.imshow('Sobel X', abs_sobelx) cv2.imshow('Sobel Y', abs_sobely) cv2.imshow('Sobel XY', sobelxy) cv2.waitKey(0) cv2.destroyAllWindows()
-
cv2.Sobel()
函数可以实现 Sobel 算子。- 第一个参数是输入图像,必须是灰度图像。
- 第二个参数是输出图像的数据类型,
cv2.CV_64F
表示 64 位浮点数,可以表示负数和更精确的梯度值。 - 第三个参数是 x 方向的导数阶数,1 表示计算 x 方向的一阶导数。
- 第四个参数是 y 方向的导数阶数,0 表示不计算 y 方向的导数。
ksize
参数是 Sobel 算子的核的大小,必须是奇数。
-
由于 Sobel 算子计算的梯度值可能为负数,所以需要使用
cv2.convertScaleAbs()
函数将其转换为绝对值,并转换为 8 位无符号整数,才能正常显示。 -
cv2.addWeighted()
函数可以合并两个图像,alpha
和beta
参数分别是两个图像的权重,gamma
参数是添加到结果上的一个标量。
-
-
Laplacian 算子:二阶导的魅力
Laplacian 算子是一种基于图像梯度的二阶微分算子,对噪声比较敏感。
import cv2 img = cv2.imread('your_image.jpg', cv2.IMREAD_GRAYSCALE) # Laplacian 算子 laplacian = cv2.Laplacian(img, cv2.CV_64F) # 将梯度值转换为绝对值,并转换为 8 位无符号整数 abs_laplacian = cv2.convertScaleAbs(laplacian) cv2.imshow('Laplacian', abs_laplacian) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.Laplacian()
函数可以实现 Laplacian 算子。 -
Canny 边缘检测:边缘检测的王者
Canny 边缘检测是一种多阶段的边缘检测算法,它包括以下步骤:
- 高斯滤波:去除图像噪声。
- 计算梯度:使用 Sobel 算子计算图像的梯度。
- 非极大值抑制:去除梯度方向上的非极大值。
- 双阈值检测:使用两个阈值来区分边缘像素和非边缘像素。
- 边缘连接:将边缘像素连接成完整的边缘。
Canny 边缘检测是目前最常用的边缘检测算法之一。
import cv2 img = cv2.imread('your_image.jpg', cv2.IMREAD_GRAYSCALE) # Canny 边缘检测 (参数分别为:图像,低阈值,高阈值) canny = cv2.Canny(img, 50, 150) cv2.imshow('Canny', canny) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.Canny()
函数可以实现 Canny 边缘检测。threshold1
是低阈值,threshold2
是高阈值。建议高阈值是低阈值的2-3倍。
第四部分:图像形态学操作,让图像“变形”
图像形态学操作是一种基于形状的图像处理技术,可以用来去除图像噪声,连接断裂的边缘,或者填充图像中的空洞。
-
腐蚀:蚕食边缘
腐蚀操作可以去除图像边缘的像素,使图像中的物体变小。
import cv2 import numpy as np img = cv2.imread('your_image.jpg', cv2.IMREAD_GRAYSCALE) # 定义一个 5x5 的矩形结构元素 kernel = np.ones((5, 5), np.uint8) # 腐蚀操作 erosion = cv2.erode(img, kernel, iterations=1) cv2.imshow('Erosion', erosion) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.erode()
函数可以实现腐蚀操作。- 第一个参数是输入图像,必须是灰度图像。
- 第二个参数是结构元素,用来定义腐蚀的形状和大小。
iterations
参数是腐蚀的次数。
-
膨胀:扩张领土
膨胀操作可以增加图像边缘的像素,使图像中的物体变大。
import cv2 import numpy as np img = cv2.imread('your_image.jpg', cv2.IMREAD_GRAYSCALE) # 定义一个 5x5 的矩形结构元素 kernel = np.ones((5, 5), np.uint8) # 膨胀操作 dilation = cv2.dilate(img, kernel, iterations=1) cv2.imshow('Dilation', dilation) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.dilate()
函数可以实现膨胀操作。 -
开运算:先腐蚀后膨胀
开运算可以去除图像中的小噪声,连接断裂的边缘,并平滑图像的轮廓。
import cv2 import numpy as np img = cv2.imread('your_image.jpg', cv2.IMREAD_GRAYSCALE) # 定义一个 5x5 的矩形结构元素 kernel = np.ones((5, 5), np.uint8) # 开运算 opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel) cv2.imshow('Opening', opening) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.morphologyEx()
函数可以实现各种形态学操作。cv2.MORPH_OPEN
表示开运算。 -
闭运算:先膨胀后腐蚀
闭运算可以填充图像中的小空洞,连接相邻的物体,并平滑图像的轮廓。
import cv2 import numpy as np img = cv2.imread('your_image.jpg', cv2.IMREAD_GRAYSCALE) # 定义一个 5x5 的矩形结构元素 kernel = np.ones((5, 5), np.uint8) # 闭运算 closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel) cv2.imshow('Closing', closing) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.morphologyEx()
函数可以实现各种形态学操作。cv2.MORPH_CLOSE
表示闭运算。
第五部分:图像分割,化整为零
图像分割是将图像分成多个区域的过程,每个区域都具有相似的特征。图像分割是计算机视觉中的一个重要任务,可以用于目标检测、图像识别等应用。
-
阈值分割:简单粗暴
阈值分割是一种最简单的图像分割方法,它根据像素值的大小将图像分成两个区域。
import cv2 img = cv2.imread('your_image.jpg', cv2.IMREAD_GRAYSCALE) # 阈值分割 (大于 127 的像素设置为 255,小于等于 127 的像素设置为 0) ret, thresh = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY) cv2.imshow('Threshold', thresh) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.threshold()
函数可以实现阈值分割。thresh
是分割后的图像。ret
是阈值。cv2.THRESH_BINARY
表示二进制阈值分割,大于阈值的像素设置为最大值,小于等于阈值的像素设置为 0。cv2.THRESH_BINARY_INV
表示反二进制阈值分割,大于阈值的像素设置为 0,小于等于阈值的像素设置为最大值。cv2.THRESH_TRUNC
表示截断阈值分割,大于阈值的像素设置为阈值,小于等于阈值的像素保持不变。cv2.THRESH_TOZERO
表示置零阈值分割,大于阈值的像素保持不变,小于等于阈值的像素设置为 0。cv2.THRESH_TOZERO_INV
表示反置零阈值分割,大于阈值的像素设置为 0,小于等于阈值的像素保持不变。
-
自适应阈值分割:因地制宜
自适应阈值分割可以根据图像的局部特征自动选择阈值,适用于光照不均匀的图像。
import cv2 img = cv2.imread('your_image.jpg', cv2.IMREAD_GRAYSCALE) # 自适应阈值分割 (使用高斯加权平均) thresh = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2) cv2.imshow('Adaptive Threshold', thresh) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.adaptiveThreshold()
函数可以实现自适应阈值分割。cv2.ADAPTIVE_THRESH_MEAN_C
表示使用邻域的平均值作为阈值。cv2.ADAPTIVE_THRESH_GAUSSIAN_C
表示使用邻域的高斯加权平均值作为阈值。blockSize
参数是邻域的大小。C
参数是从平均值或加权平均值中减去的常数。
-
K-means 聚类:抱团取暖
K-means 聚类是一种常用的无监督学习算法,可以将图像中的像素分成 K 个簇,每个簇的像素具有相似的颜色或灰度值。
import cv2 import numpy as np img = cv2.imread('your_image.jpg') # 将图像转换为一维数组 pixels = img.reshape((-1, 3)) pixels = np.float32(pixels) # 定义 K-means 聚类的参数 criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.2) K = 3 # K-means 聚类 ret, labels, centers = cv2.kmeans(pixels, K, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS) # 将聚类结果转换为图像 centers = np.uint8(centers) segmented_data = centers[labels.flatten()] segmented_image = segmented_data.reshape(img.shape) cv2.imshow('Segmented Image', segmented_image) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.kmeans()
函数可以实现 K-means 聚类。- 第一个参数是输入数据,必须是
np.float32
类型。 - 第二个参数是簇的数量。
- 第三个参数是最佳标签,可以设置为
None
。 - 第四个参数是终止条件。
cv2.TERM_CRITERIA_EPS
表示当聚类中心的移动距离小于某个值时,停止聚类。cv2.TERM_CRITERIA_MAX_ITER
表示当聚类迭代次数达到最大值时,停止聚类。
- 第五个参数是尝试不同的初始标签的次数。
- 第六个参数是初始聚类中心的选择方法。
cv2.KMEANS_RANDOM_CENTERS
表示随机选择初始聚类中心。cv2.KMEANS_PP_CENTERS
表示使用 K-means++ 算法选择初始聚类中心。
- 第一个参数是输入数据,必须是
第六部分:目标检测,火眼金睛
目标检测是指在图像中识别和定位特定物体的过程。
-
Haar 特征 + AdaBoost:古老的智慧
Haar 特征是一种简单的图像特征,可以用来描述图像中的边缘、线段和中心点等结构。AdaBoost 是一种机器学习算法,可以用来训练分类器,将 Haar 特征组合成一个强分类器。
OpenCV 提供了预训练的 Haar 分类器,可以用来检测人脸、眼睛等物体。
import cv2 # 加载人脸检测器 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') # 需要下载 img = cv2.imread('your_image.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 检测人脸 faces = face_cascade.detectMultiScale(gray, 1.1, 4) # 在图像中标记人脸 for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.imshow('Faces detected', img) cv2.waitKey(0) cv2.destroyAllWindows()
cv2.CascadeClassifier()
函数可以加载 Haar 分类器。detectMultiScale()
函数可以检测图像中的物体。- 第一个参数是输入图像,必须是灰度图像。
scaleFactor
参数是图像缩放比例,用来减少计算量。minNeighbors
参数是每个目标至少需要多少个邻居才能被认为是有效的。
-
HOG 特征 + SVM:曾经的王者
HOG (Histogram of Oriented Gradients) 特征是一种用来描述图像局部梯度方向信息的特征。SVM (Support Vector Machine) 是一种机器学习算法,可以用来训练分类器,将 HOG 特征组合成一个强分类器。
HOG 特征和 SVM 算法曾经是目标检测领域的主流方法。
-
深度学习目标检测算法:未来的方向
随着深度学习的发展,基于卷积神经网络的目标检测算法,如YOLO、SSD、Faster R-CNN等,已经成为目标检测领域的主流方法。这些算法具有更高的精度和更快的速度,但需要大量的训练数据和计算资源。这些算法的使用通常需要用到 dnn
模块。这里不深入介绍,只是提一下方向。
总结
今天我们学习了 OpenCV cv2
模块的一些常用图像处理和计算机视觉算法。希望大家能够掌握这些知识,并将其应用到实际项目中。当然,OpenCV 的功能远不止这些,还有很多更高级的算法等待我们去探索。记住,实践是检验真理的唯一标准,多写代码,多做实验,才能真正掌握 OpenCV!
功能 | 函数/方法 | 描述 |
---|---|---|
读取图像 | cv2.imread(filename, flags) |
读取图像文件。flags 参数指定读取图像的方式,如 cv2.IMREAD_COLOR (默认), cv2.IMREAD_GRAYSCALE , cv2.IMREAD_UNCHANGED 。 |
显示图像 | cv2.imshow(window_name, image) |
在窗口中显示图像。 |
关闭窗口 | cv2.waitKey(delay) |
等待键盘按下任意键,或等待指定时间(毫秒)。delay=0 表示无限期等待。 |
cv2.destroyAllWindows() |
关闭所有打开的 OpenCV 窗口。 | |
色彩空间转换 | cv2.cvtColor(image, code) |
转换图像的色彩空间。code 参数指定转换的方式,如 cv2.COLOR_BGR2GRAY , cv2.COLOR_BGR2HSV , cv2.COLOR_RGB2BGR 等。 |
缩放图像 | cv2.resize(image, dsize[, fx[, fy[, interpolation]]]) |
缩放图像。dsize 参数指定目标图像的大小,fx 和 fy 参数指定 x 和 y 方向的缩放比例,interpolation 参数指定插值方法。 |
图像滤波 | cv2.blur(image, ksize) |
均值滤波。ksize 参数指定滤波器的大小。 |
cv2.GaussianBlur(image, ksize, sigmaX[, sigmaY]) |
高斯滤波。ksize 参数指定滤波器的大小,sigmaX 和 sigmaY 参数指定 x 和 y 方向的标准差。 |
|
cv2.medianBlur(image, ksize) |
中值滤波。ksize 参数指定滤波器的大小,必须是奇数。 |
|
cv2.bilateralFilter(image, d, sigmaColor, sigmaSpace) |
双边滤波。d 参数指定滤波器的直径,sigmaColor 参数指定颜色空间的标准差,sigmaSpace 参数指定坐标空间的标准差。 |
|
边缘检测 | cv2.Sobel(image, ddepth, dx, dy[, ksize[, scale[, delta[, borderType]]]]]) |
Sobel 算子。ddepth 参数指定输出图像的深度,dx 和 dy 参数指定 x 和 y 方向的导数阶数,ksize 参数指定 Sobel 算子的大小。 |
cv2.Laplacian(image, ddepth[, ksize[, scale[, delta[, borderType]]]]]) |
Laplacian 算子。ddepth 参数指定输出图像的深度,ksize 参数指定 Laplacian 算子的大小。 |
|
cv2.Canny(image, threshold1, threshold2[, apertureSize[, L2gradient]]) |
Canny 边缘检测。threshold1 和 threshold2 参数指定低阈值和高阈值,apertureSize 参数指定 Sobel 算子的大小。 |
|
形态学操作 | cv2.erode(image, kernel[, anchor[, iterations[, borderType[, borderValue]]]]) |
腐蚀操作。kernel 参数指定结构元素,iterations 参数指定腐蚀的次数。 |
cv2.dilate(image, kernel[, anchor[, iterations[, borderType[, borderValue]]]]) |
膨胀操作。kernel 参数指定结构元素,iterations 参数指定膨胀的次数。 |
|
cv2.morphologyEx(image, op, kernel[, anchor[, iterations[, borderType[, borderValue]]]]]) |
形态学变换。op 参数指定形态学操作的类型,如 cv2.MORPH_OPEN (开运算), cv2.MORPH_CLOSE (闭运算), cv2.MORPH_GRADIENT (形态学梯度), cv2.MORPH_TOPHAT (顶帽变换), cv2.MORPH_BLACKHAT (黑帽变换)。 |
|
阈值分割 | cv2.threshold(image, thresh, maxval, type) |
阈值分割。thresh 参数指定阈值,maxval 参数指定最大值,type 参数指定阈值分割的类型,如 cv2.THRESH_BINARY , cv2.THRESH_BINARY_INV , cv2.THRESH_TRUNC , cv2.THRESH_TOZERO , cv2.THRESH_TOZERO_INV 。 |
自适应阈值分割 | cv2.adaptiveThreshold(image, maxValue, adaptiveMethod, thresholdType, blockSize, C) |
自适应阈值分割。maxValue 参数指定最大值,adaptiveMethod 参数指定自适应方法,如 cv2.ADAPTIVE_THRESH_MEAN_C , cv2.ADAPTIVE_THRESH_GAUSSIAN_C ,thresholdType 参数指定阈值分割的类型,blockSize 参数指定块大小,C 参数指定常数。 |
K-means 聚类 | cv2.kmeans(data, K, bestLabels, criteria, attempts, flags) |
K-means 聚类。data 参数指定输入数据,K 参数指定簇的数量,criteria 参数指定终止条件,attempts 参数指定尝试的次数,flags 参数指定初始中心的选择方法。 |
Haar 特征检测 | cv2.CascadeClassifier.detectMultiScale(image[, scaleFactor[, minNeighbors[, flags[, minSize[, maxSize]]]]]) |
使用 Haar 分类器检测图像中的物体。scaleFactor 参数指定图像缩放比例,minNeighbors 参数指定每个目标至少需要多少个邻居才能被认为是有效的,minSize 参数指定最小目标大小,maxSize 参数指定最大目标大小。 |
希望以上内容对您有所帮助! 以后有需要尽管吩咐。