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

目录

三四、机器学习

支持向量机(SVM)

K近邻算法(KNearest)

随机森林(RTrees)

朴素贝叶斯分类器(NormalBayesClassifier)

自适应增强算法(Boost)

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

解释

三五、相机标定

棋盘格角点检测 (findChessboardCorners)

精确化角点位置 (cornerSubPix)

摄像机标定 (calibrateCamera)

图像畸变校正 (undistort)

单应性矩阵计算 (findHomography)

[PnP 问题求解 (solvePnP)](#PnP 问题求解 (solvePnP))

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

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

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


三四、机器学习

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

|-----------------------------|------------------------------------------------------------------|--------------------------|-----------------------|
| 常用机器学习算法 ||||
| SVM(Support Vector Machine) | KNearest | RTrees(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中,摄像机标定是计算机视觉中的一个重要步骤,用于确定摄像机的内部参数和外部参数。摄像机标定包括一系列步骤,如角点检测、图像畸变校正、姿态估计等。下面介绍一些常用的摄像机标定函数及其使用示例。

|----------------------------|------------------------------|-----------------------|--------------|
| 摄像机标定函数 ||||
| findChessboardCorners | findCirclesGrid | find4QuadCornerSubpix | cornerSubPix |
| 检测棋盘格角点 | 检测圆形网格点 | 精确化角点检测 | 进一步精确化角点位置 |
| calibrateCamera | initUndistortRectifyMap | remap | undistort |
| 摄像机标定 | 初始化去畸变和校正映射 | 重映射图像 | 校正图像的畸变 |
| findHomography | solvePnP | solvePnPRansac | Rodrigues |
| 计算单应性矩阵 | 解PnP问题,估计物体的姿态 | 使用RANSAC解PnP问题 | 将旋转向量转换为旋转矩阵 |
| convertPointsToHomogeneous | convertPointsFromHomogeneous | | |
| 将点转换为齐次坐标 | 将齐次坐标转换为普通坐标 | | |

棋盘格角点检测 (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中的摄像机标定函数来进行角点检测、图像畸变校正、姿态估计等任务。根据具体的应用需求,可以灵活运用这些函数来实现复杂的摄像机标定和图像处理任务。

相关推荐
你觉得20510 分钟前
浙江大学朱霖潮研究员:《人工智能重塑科学与工程研究》以蛋白质结构预测为例|附PPT下载方法
大数据·人工智能·机器学习·ai·云计算·aigc·powerpoint
吴梓穆22 分钟前
UE5学习笔记 FPS游戏制作37 蓝图函数库 自己定义公共方法
笔记·学习·ue5
吴梓穆29 分钟前
UE5学习笔记 FPS游戏制作41 世界模式显示UI
笔记·学习·ue5
人工干智能32 分钟前
科普:One-Class SVM和SVDD
人工智能·机器学习·支持向量机
虾球xz34 分钟前
游戏引擎学习第200天
学习·游戏引擎
蚝油菜花43 分钟前
DeepSite:基于DeepSeek的开源AI前端开发神器,一键生成游戏/网页代码
人工智能·开源
蚝油菜花43 分钟前
PaperBench:OpenAI开源AI智能体评测基准,8316节点精准考核复现能力
人工智能·开源
蚝油菜花1 小时前
DreamActor-M1:字节跳动推出AI动画黑科技,静态照片秒变生动视频
人工智能·开源
MPCTHU1 小时前
预测分析(三):基于机器学习的分类预测
人工智能·机器学习·分类