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

相关推荐

  1. opencv函数学习_“干货“_13

    2024-07-22 10:02:01       19 阅读
  2. opencv函数学习_“干货“_10

    2024-07-22 10:02:01       27 阅读
  3. opencv函数学习_“干货“_11

    2024-07-22 10:02:01       18 阅读
  4. opencv函数学习_“干货“_12

    2024-07-22 10:02:01       17 阅读
  5. opencv函数学习_“干货“_14

    2024-07-22 10:02:01       17 阅读
  6. opencv函数学习_“干货“_总

    2024-07-22 10:02:01       19 阅读
  7. opencv函数学习_“干货“_9

    2024-07-22 10:02:01       25 阅读
  8. opencv函数学习_“干货“_7

    2024-07-22 10:02:01       19 阅读
  9. opencv函数学习_“干货“_8

    2024-07-22 10:02:01       19 阅读
  10. opencv函数学习_“干货“_6

    2024-07-22 10:02:01       14 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-22 10:02:01       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-22 10:02:01       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-22 10:02:01       45 阅读
  4. Python语言-面向对象

    2024-07-22 10:02:01       55 阅读

热门阅读

  1. 高精度-大整数计算模板

    2024-07-22 10:02:01       18 阅读
  2. Anonymous Informant

    2024-07-22 10:02:01       16 阅读
  3. Oracle(16)什么是视图(View)?

    2024-07-22 10:02:01       20 阅读
  4. kotlin中常见的创建协程的方式

    2024-07-22 10:02:01       13 阅读
  5. 【已解决】服务器无法联网与更换镜像源

    2024-07-22 10:02:01       19 阅读
  6. 20240721图像扩边与填充详解

    2024-07-22 10:02:01       15 阅读