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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/48720.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ASP.NET CORE依赖注入全面解析:理解DependencyInjectionAbstractions的核心

引言 ASP.NET Core中,依赖注入(Dependency Injection, DI)是其核心功能之一。它通过Microsoft.Extensions.DependencyInjection命名空间提供默认的DI容器,实现了松耦合和模块化设计。在本文中,我们将深入剖析ASP.NET …

通过json传递请求参数,如何处理动态参数和接口依赖

嗨,大家好,我是兰若姐姐,今天给大家讲一下如何通过json传递请求参数,如何处理动态参数和接口依赖 1. 使用配置文件和模板 在 test_data.json 中,你可以使用一些占位符或模板变量,然后在运行测试之前&…

手写数字识别(机器学习)

一:一对多分类方法(one-vs-all) 这里先上的代码,想看原理可以到代码下面。 在数据集中,y的取值为1~10,y10表示当前数字为0 首先读取数据,并对数据进行切分。 import pandas as pd import numpy as np import matplotlibmatplo…

【BUG】已解决:IndexError: positional indexers are out-of-bounds

IndexError: positional indexers are out-of-bounds 目录 IndexError: positional indexers are out-of-bounds 【常见模块错误】 【解决方案】 原因分析 解决方法 示例代码 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博…

JavaScript:数组排序(冒泡排序)

目录 一、数组排序 二、sort()方法 1、基本语法 2、默认排序 3、自定义排序 三、冒泡排序 1、基本概念 2、实现步骤 3、过程解析 4、代码示例 5、时间复杂度 一、数组排序 对一个给定数组进行处理,使其从无序变为有序,这个过程就是数组排序&…

学习笔记11:后端的文件,怎么直接在浏览器网址栏键入地址后直接下载?

后端的文件,怎么直接在浏览器网址栏键入地址后直接下载? 要实现在浏览器中通过直接键入地址下载文件,后端需要处理HTTP请求并返回相应的文件。以下是一些基本的步骤和示例代码,展示如何在C后端实现这一功能。 步骤 设置HTTP服务器&#x…

二叉树基础及实现(二,加经典OJ)

目录: 一 .接引二叉树(一) 二 .二叉树相关oj题: 1. 检查两颗树是否相同 2. 另一颗树的子树 3. 翻转二叉树 4. 判断一颗二叉树是否是平衡二叉树 5. 对称二叉树 6. 二叉树的构建及遍历 7. 二叉树的分层遍历 8. 给定一个二叉树, 找到该树中两个指定节点的最…

Fine-BI学习笔记

官方学习文档:快速入门指南- FineBI帮助文档 FineBI帮助文档 (fanruan.com) 1.零基础入门 1.1 功能简介 完成四个流程:新建分析主题、添加数据、分析数据、分享协作。 示例数据获取:5分钟上手FineBI - FineBI帮助文档 (fanruan.com) 1.2 …

多任务学习的协同效应:提升目标检测的性能

多任务学习的协同效应:提升目标检测的性能 在深度学习的目标检测领域,模型通常被训练来执行单一任务,如识别图像中的物体并定位它们。然而,这种方法可能没有充分利用模型的潜力。多任务学习(Multi-Task Learning, MTL…

C++中的dynamic_cast函数

dynamic_cast 是 C 中的一个类型转换操作符,它主要用于处理类的层次结构中的安全向下转换(即将基类类型的指针或引用转换为派生类类型的指针或引用)。与 static_cast 不同,dynamic_cast 在运行时检查转换的安全性,如果…

R语言优雅的进行广义可加模型泊松回归分析

泊松回归(Poisson regression)是以结局变量为计数结果时的一种回归分析。泊松回归在我们的生活中应用非常广泛,例如:1分钟内过马路人数,1天内火车站的旅客流动数,1天内的银行取钱人数,一周内的销…

【已解决】如何使用母版视图统一PPT格式?

母版视图在PPT中是一个强大的工具,可以帮助我们统一幻灯片的格式、布局和设计风格。今天来看看如何利用母版视图统一PPT格式,让每张幻灯片看起来一致和专业。 第一步:打开母版视图 打开PPT后,在顶部菜单栏中,选择【视…

Docker容器限制内存与CPU使用

文章目录 Docker 容器限制内存与 CPU 使用内存限额内存限制命令举例使用 `nginx` 镜像学习内存分配只指定 `-m` 参数的情况CPU 限制命令举例验证资源使用Docker 容器限制内存与 CPU 使用 在生产环境中,为了保证服务器不因某一个软件导致服务器资源耗尽,我们会限制软件的资源…

【C++20】从0开始自制协程库

文章目录 参考 很多人对协程的理解就是在用户态线程把CPU对线程的调度复制了一遍,减少了线程的数量,也就是说在一个线程内完成对协程的调度,不需要线程切换导致上下文切换的开销。但是线程切换是CPU行为,就算你的程序只有一个线程…

windows服务器启动apache失败,提示请通过cmd命令行启动:net start apache

Windows Server 2012 R2服务器突然停止运行apche,启动apache失败,提示请通过cmd命令行启动:net start apache 1.报错截图: 进入服务里输入命令启动也不行,提示由于登录失败而无法启动服务。 2.问题原因: 服务器www用…

Node.js知识点总结

Node.js知识点总结 Node.js其本质和浏览器一样是一个JavaScript运行环境。浏览器的运行环境为V8引擎浏览器内置API(BOM、DOM、Canvas);而node.js的运行环境是V8引擎node提供的API(fs、path、http)。它使JavaScript可以编写后端。 基本知识 fs文件系统模块 它提供一…

springboot宠物相亲平台-计算机毕业设计源码16285

目 录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2 开发环境及相关技术介绍 2.1 MySQL数据库的介绍 2.2 B/S架构的介绍 2.3 Java语言 2.4 SpringBoot框架 3 宠物相亲平台系统分析 3.1 可行性分析 3.1.1 技术可行性分析 3.1.2 经济…

基于FPGA + Qt + OpenCv的人脸考勤系统

一:界面设计 客户端界面设计: 服务端界面设计: 简介:首先服务端在注册界面先注册人脸,然后客户端界面进行人脸识别,将人脸识别的图像发送给服务端以后,服务端在图像数据库里寻找人脸比对,若有数据就将查询到的个人信息发送给客户端,并在客户端显示,查询界面是用来查…

Ribbon负载均衡与内核原理

什么是Ribbon? 目前主流的负载方案分为两种: 集中式负载均衡,在消费者和服务提供方中间使用独立的代理方式进行负载,有硬件的(比如F5),也有软件的(Nginx)客户端根据自己的请求做负…

开放式耳机哪种性价比高?五大高口碑优质款式耳机直入!

​或许我们的日常生活中充满了噪声,例如马路、地铁还有公交上,嘈杂的声音会影响我们的心情,同时还会损伤我们的耳朵,在嘈杂的环境中,想听歌想煲剧了怎么办,又不想沉浸在自己的世界里,就可以使用…