欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > opencv—常用函数学习_“干货“_13

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

2024/10/24 4:34:13 来源:https://blog.csdn.net/chen_0717/article/details/140584987  浏览:    关键词:opencv—常用函数学习_“干货“_13

目录

三四、机器学习

支持向量机(SVM)

K近邻算法(KNearest)

随机森林(RTrees)

朴素贝叶斯分类器(NormalBayesClassifier)

自适应增强算法(Boost)

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

解释

三五、相机标定

棋盘格角点检测 (findChessboardCorners)

精确化角点位置 (cornerSubPix)

摄像机标定 (calibrateCamera)

图像畸变校正 (undistort)

单应性矩阵计算 (findHomography)

PnP 问题求解 (solvePnP)

http://t.csdnimg.cn/i8pqt —— opencv—常用函数学习_“干货“_总(VIP)

散的正在一部分一部分发,不需要VIP。

资料整理不易,有用话给个赞和收藏吧。


三四、机器学习

        在OpenCV中,机器学习模块(ML module)提供了多种分类器和回归器,用于各种机器学习任务。下面介绍一些常用的机器学习算法及其使用示例。

常用机器学习算法
SVM(Support Vector Machine)KNearestRTrees(Random Trees)NormalBayesClassifier
支持向量机K近邻算法随机森林朴素贝叶斯分类器
Boost(AdaBoost)ANN_MLP(Artificial Neural Network - Multi-Layer Perceptron)DNN(Deep Neural Network)
自适应增强算法多层感知器人工神经网络深度神经网络

支持向量机(SVM)
import cv2
import numpy as np# 创建训练数据
train_data = np.array([[1, 2], [2, 3], [3, 3], [6, 6], [7, 7], [8, 8]], dtype=np.float32)
labels = np.array([0, 0, 0, 1, 1, 1], dtype=np.int32)# 初始化SVM并设置参数
svm = cv2.ml.SVM_create()
svm.setKernel(cv2.ml.SVM_LINEAR)
svm.setType(cv2.ml.SVM_C_SVC)
svm.setC(1)# 训练SVM
svm.train(train_data, cv2.ml.ROW_SAMPLE, labels)# 创建测试数据
test_data = np.array([[2, 2], [5, 5]], dtype=np.float32)# 预测
_, results = svm.predict(test_data)
print("Predicted labels:", results.ravel())
K近邻算法(KNearest)
# 初始化K近邻分类器并设置参数
knn = cv2.ml.KNearest_create()
knn.setDefaultK(3)# 训练K近邻分类器
knn.train(train_data, cv2.ml.ROW_SAMPLE, labels)# 预测
ret, results, neighbours, dist = knn.findNearest(test_data, k=3)
print("Predicted labels:", results.ravel())
随机森林(RTrees)
# 初始化随机森林分类器
rtrees = cv2.ml.RTrees_create()# 训练随机森林分类器
rtrees.train(train_data, cv2.ml.ROW_SAMPLE, labels)# 预测
_, results = rtrees.predict(test_data)
print("Predicted labels:", results.ravel())
朴素贝叶斯分类器(NormalBayesClassifier)
# 初始化朴素贝叶斯分类器
bayes = cv2.ml.NormalBayesClassifier_create()# 训练朴素贝叶斯分类器
bayes.train(train_data, cv2.ml.ROW_SAMPLE, labels)# 预测
_, results = bayes.predict(test_data)
print("Predicted labels:", results.ravel())
自适应增强算法(Boost)
# 初始化Boost分类器
boost = cv2.ml.Boost_create()# 训练Boost分类器
boost.train(train_data, cv2.ml.ROW_SAMPLE, labels)# 预测
_, results = boost.predict(test_data)
print("Predicted labels:", results.ravel())
多层感知器人工神经网络(ANN_MLP)
# 初始化多层感知器人工神经网络
mlp = cv2.ml.ANN_MLP_create()
mlp.setLayerSizes(np.array([2, 5, 1]))  # 输入层2个节点,隐藏层5个节点,输出层1个节点
mlp.setTrainMethod(cv2.ml.ANN_MLP_BACKPROP)# 训练多层感知器
mlp.train(train_data, cv2.ml.ROW_SAMPLE, labels)# 预测
_, results = mlp.predict(test_data)
print("Predicted labels:", results.ravel())

解释

  • SVM:适用于分类和回归任务,通过最大化类别间的间隔来找到最佳分类超平面。
  • KNearest:基于最近邻居的投票进行分类,简单易实现但计算量大。
  • RTrees:随机森林,通过多个决策树的集成提高分类精度和防止过拟合。
  • NormalBayesClassifier:基于贝叶斯定理进行分类,假设特征之间相互独立。
  • Boost:通过加权的方式结合多个弱分类器形成一个强分类器,常用AdaBoost算法。
  • ANN_MLP:多层感知器神经网络,通过反向传播算法进行训练,适用于复杂的非线性问题。
  • DNN:深度神经网络,适用于处理大规模数据和复杂模式识别任务。

        这些示例展示了如何使用OpenCV中的各种机器学习算法来进行分类和预测任务。根据具体的应用需求,可以灵活运用这些算法来实现机器学习任务。

三五、相机标定

        在OpenCV中,摄像机标定是计算机视觉中的一个重要步骤,用于确定摄像机的内部参数和外部参数。摄像机标定包括一系列步骤,如角点检测、图像畸变校正、姿态估计等。下面介绍一些常用的摄像机标定函数及其使用示例。

摄像机标定函数
findChessboardCornersfindCirclesGridfind4QuadCornerSubpixcornerSubPix
检测棋盘格角点检测圆形网格点精确化角点检测进一步精确化角点位置
calibrateCamerainitUndistortRectifyMapremapundistort
摄像机标定初始化去畸变和校正映射重映射图像校正图像的畸变
findHomographysolvePnPsolvePnPRansacRodrigues
计算单应性矩阵解PnP问题,估计物体的姿态使用RANSAC解PnP问题将旋转向量转换为旋转矩阵
convertPointsToHomogeneousconvertPointsFromHomogeneous
将点转换为齐次坐标将齐次坐标转换为普通坐标
棋盘格角点检测 (findChessboardCorners)
import cv2
import numpy as np# 读取棋盘格图像
image = cv2.imread('path_to_chessboard_image.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 设置棋盘格大小
chessboard_size = (9, 6)# 检测棋盘格角点
ret, corners = cv2.findChessboardCorners(gray, chessboard_size, None)# 如果找到角点,则绘制并显示
if ret:cv2.drawChessboardCorners(image, chessboard_size, corners, ret)cv2.imshow('Chessboard Corners', image)cv2.waitKey(0)cv2.destroyAllWindows()
精确化角点位置 (cornerSubPix)
# 进一步精确化角点位置
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
corners2 = cv2.cornerSubPix(gray, corners, (11, 11), (-1, -1), criteria)# 绘制精确化后的角点
cv2.drawChessboardCorners(image, chessboard_size, corners2, ret)
cv2.imshow('Refined Corners', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
摄像机标定 (calibrateCamera)
# 准备对象点和图像点
objp = np.zeros((chessboard_size[0] * chessboard_size[1], 3), np.float32)
objp[:, :2] = np.mgrid[0:chessboard_size[0], 0:chessboard_size[1]].T.reshape(-1, 2)objpoints = [] # 在世界坐标系中的三维点
imgpoints = [] # 在图像平面的二维点objpoints.append(objp)
imgpoints.append(corners2)# 摄像机标定
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None)print("Camera matrix:\n", mtx)
print("Distortion coefficients:\n", dist)
图像畸变校正 (undistort)
# 校正图像的畸变
dst = cv2.undistort(image, mtx, dist, None, mtx)# 显示校正后的图像
cv2.imshow('Undistorted Image', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
单应性矩阵计算 (findHomography)
# 假设有两个点集,pts_src 和 pts_dst
pts_src = np.array([[0, 0], [0, 1], [1, 1], [1, 0]], dtype=np.float32)
pts_dst = np.array([[0, 0], [0, 1], [1, 1], [1, 0]], dtype=np.float32)# 计算单应性矩阵
H, mask = cv2.findHomography(pts_src, pts_dst, cv2.RANSAC, 5.0)print("Homography matrix:\n", H)
PnP 问题求解 (solvePnP)
# 对象点和图像点
obj_points = np.array([[0, 0, 0], [0, 1, 0], [1, 1, 0], [1, 0, 0]], dtype=np.float32)
img_points = np.array([[100, 100], [100, 200], [200, 200], [200, 100]], dtype=np.float32)# 估计物体姿态
success, rotation_vector, translation_vector = cv2.solvePnP(obj_points, img_points, mtx, dist)print("Rotation vector:\n", rotation_vector)
print("Translation vector:\n", translation_vector)

        这些示例展示了如何使用OpenCV中的摄像机标定函数来进行角点检测、图像畸变校正、姿态估计等任务。根据具体的应用需求,可以灵活运用这些函数来实现复杂的摄像机标定和图像处理任务。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com