opencv hand openpose

使用opencv c++ 来调用caffemodel

使用opencv 得dnn 模块调用 caffemodel得程序,图片自己输入就行,不做过多得解释,看代码清单。
在这里插入图片描述

在这里插入图片描述

定义手指关节点

const int POSE_PAIRS[20][2] =
{
{0,1}, {1,2}, {2,3}, {3,4}, // thumb
{0,5}, {5,6}, {6,7}, {7,8}, // index
{0,9}, {9,10}, {10,11}, {11,12}, // middle
{0,13}, {13,14}, {14,15}, {15,16}, // ring
{0,17}, {17,18}, {18,19}, {19,20} // small
};

string protoFile = “hand/pose_deploy.prototxt”;
string weightsFile = “hand/pose_iter_102000.caffemodel”;

int nPoints = 22;

代码清单

#include <opencv2/dnn.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>using namespace std;
using namespace cv;
using namespace cv::dnn;
#ifdef _DEBUG
#pragma comment(lib,"opencv_world455d.lib")
#else
#pragma comment(lib,"opencv_world455.lib")
#endifconst int POSE_PAIRS[20][2] =
{{0,1}, {1,2}, {2,3}, {3,4},         // thumb{0,5}, {5,6}, {6,7}, {7,8},         // index{0,9}, {9,10}, {10,11}, {11,12},    // middle{0,13}, {13,14}, {14,15}, {15,16},  // ring{0,17}, {17,18}, {18,19}, {19,20}   // small
};string protoFile = "hand/pose_deploy.prototxt";
string weightsFile = "hand/pose_iter_102000.caffemodel";int nPoints = 22;int main(int argc, char **argv)
{string imageFile = "qianbo2.jpg";// Take arguments from commmand lineif (argc == 2){imageFile = argv[1];}float thresh = 0.01;Mat frame = imread(imageFile);Mat frameCopy = frame.clone();int frameWidth = frame.cols;int frameHeight = frame.rows;float aspect_ratio = frameWidth / (float)frameHeight;int inHeight = 368;int inWidth = (int(aspect_ratio*inHeight) * 8) / 8;cout << "inWidth = " << inWidth << " ; inHeight = " << inHeight << endl;double t = (double)cv::getTickCount();Net net = readNetFromCaffe(protoFile, weightsFile);Mat inpBlob = blobFromImage(frame, 1.0 / 255, Size(inWidth, inHeight), Scalar(0, 0, 0), false, false);net.setInput(inpBlob);Mat output = net.forward();int H = output.size[2];int W = output.size[3];// find the position of the body partsvector<Point> points(nPoints);for (int n = 0; n < nPoints; n++){// Probability map of corresponding body's part.Mat probMap(H, W, CV_32F, output.ptr(0, n));resize(probMap, probMap, Size(frameWidth, frameHeight));Point maxLoc;double prob;minMaxLoc(probMap, 0, &prob, 0, &maxLoc);if (prob > thresh){circle(frameCopy, cv::Point((int)maxLoc.x, (int)maxLoc.y), 8, Scalar(0, 255, 255), -1);cv::putText(frameCopy, cv::format("%d", n), cv::Point((int)maxLoc.x, (int)maxLoc.y), cv::FONT_HERSHEY_COMPLEX, 1, cv::Scalar(0, 0, 255), 2);}points[n] = maxLoc;}int nPairs = sizeof(POSE_PAIRS) / sizeof(POSE_PAIRS[0]);for (int n = 0; n < nPairs; n++){// lookup 2 connected body/hand partsPoint2f partA = points[POSE_PAIRS[n][0]];Point2f partB = points[POSE_PAIRS[n][1]];if (partA.x <= 0 || partA.y <= 0 || partB.x <= 0 || partB.y <= 0)continue;line(frame, partA, partB, Scalar(0, 255, 255), 8);circle(frame, partA, 8, Scalar(0, 0, 255), -1);circle(frame, partB, 8, Scalar(0, 0, 255), -1);}t = ((double)cv::getTickCount() - t) / cv::getTickFrequency();cout << "Time Taken = " << t << endl;imshow("Keypoints", frameCopy);imshow("Skeleton", frame);imwrite("out.jpg", frame);waitKey();return 0;
}

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

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

相关文章

Pytest框架 之【用例执行顺序】

今天在使用pytest执行用例过程中&#xff0c;使用了debug调试代码时&#xff0c;偶然发现&#xff0c;执行用例时不是自上而下的&#xff0c;pytest 中的用例执行顺序与unittest 是不一样的&#xff0c;pytest有默认的执行顺序&#xff0c;还可以自定义执行顺序。而在unittest框…

Linux 学习记录58(ARM篇)

Linux 学习记录58(ARM篇) 本文目录 Linux 学习记录58(ARM篇)一、GIC相关寄存器1. 系统框图2. 中断号对应关系 二、GICD寄存器1. GICD_CTLR2. GICD_ISENABLERx3. GICD_IPRIORITYRx4. GICD_ITARGETSRx5. GICD_ICPENDRx 三、GICC寄存器1. GICC_PMR2. GICC_CTLR3. GICC_IAR4. GICC_…

软工导论知识框架(二)结构化的需求分析

本章节涉及很多重要图表的制作&#xff0c;如ER图、数据流图、状态转换图、数据字典的书写等&#xff0c;对初学者来说比较生僻&#xff0c;本贴只介绍基础的轮廓&#xff0c;后面会有单独的帖子详解各图表如何绘制。 一.结构化的软件开发方法&#xff1a;结构化的分析、设计、…

Node.js学习笔记-02

三、node的异步I/O 四、异步编程 1、函数式编程 高阶函数 函数可以作为参数或者返回值。 偏函数用法 偏函数用法是指创建一个调用另外一个部分——参数或变量已经预置的函数——的函数的用法。 举个例子&#xff1a;在JavaScrip中进行类型判断时&#xff0c;我们通常会进…

企业网络安全与数据保护合规建设 ——从合规运营到香港上市

序言 《企业网络安全与数据保护合规建设 ——从合规运营到香港上市&#xff08;一&#xff09;》梳理了我国网络安全与数据保护领域近期主要立法情况&#xff0c;本文将着重分析拟赴港上市企业运营阶段的数据合规要点以期为拟赴港上市的相关企业提供有益的参考。 二 企业运营…

PatchMatchNet运行eth3d数据集重建 实操教程(图文并茂、超详细)、bash eval.sh脚本文件解释说明

文章目录 1 准备工作1.1 下载源码1.2 测试集下载1.2 配置环境2 eth3d 数据集 重建演示2.1 重建效果查看3 补充 测试列表定义4 Meshlab查看三维点云时 ,使用技巧总结1 Meshlab查看三维点云时 ,换背景颜色2 Meshlab查看三维点云时,点云颜色很暗淡,怎么调亮3 Meshlab和CloudCo…

Jenkins 还可以支持钉钉消息通知?一个插件带你搞定!

Jenkins 作为最流行的开源持续集成平台&#xff0c;其强大的拓展功能一直备受测试人员及开发人员的青睐。大家都知道我们可以在 Jenkins 中安装 Email 插件支持构建之后通过邮件将结果及时通知到相关人员。 但其实 Jenkins 还可以支持钉钉消息通知&#xff0c;其主要通过 Ding…

Log4j源码解析

Log4j源码解析 主要流程 Logger logger Logger.getLogger(Main.class); 1、通过Logger.getLogger(Class clazz) 或 Logger.getLogger(String name)进入。 2、加载LogManager进jvm, 执行静态代码块执行初始化, 创建出RepositorySelector实例及LoggerRepository实例(Hierarchy…

vue3响应式最大的特点

趋于面向对象编程&#xff0c;和Java很像&#xff0c;以前v-model可以使用&#xff0c;但是现在不是了。 let postsreactive({attrs:[],name:列表}) 任何东西&#xff0c;都先扔到一个对象里面 页面使用也不需要posts.name这样一堆点,直接{{name}}可以使用一个很方便的方法甩…

如何提高自动化测试覆盖率

实施自动化测试最重要的就是要保证其可用性&#xff0c;而不少同学写了不少自动化测试用例&#xff0c;但感觉到其可用性不高。究其原因&#xff0c;不是自动化测试本身的问题&#xff0c;是实施自动化测试的时候没有考虑周全。 第一&#xff0c;不合事宜地引入自动化测试 在公…

C语言实现扫雷

今天用C语言写一个扫雷的代码 扫雷其实和我们之前写的三子棋有点相似&#xff0c;首先是打印菜单&#xff0c;进行选择 我们还是像之前一样有三个文件&#xff0c;一个是game.h game.c test.c test.c实现我们的扫雷逻辑 gam.c实现我们的游戏需要的函数 game.h来声明 那么我们首…

轻量级Web报表工具ActiveReportsJS全新发布v4.0,支持集成更多前端框架!

ActiveReportsJS 是一款基于 JavaScript 和 HTML5 的轻量级Web报表工具&#xff0c;采用拖拽式设计模式&#xff0c;不需任何服务器和组件支持&#xff0c;即可在 Mac、Linux 和 Windows 操作系统中&#xff0c;设计多种类型的报表。ActiveReportsJS 同时提供跨平台报表设计、纯…

将Python远控隐藏在文档图片中的行动分析

1、概述 ** **近日&#xff0c;安天CERT通过网络安全监测发现了一起恶意文档释放Python编写的远控木马事件。通过文档内容中涉及的组织信息和其中攻击者设置的诱导提示&#xff0c;安天CERT判断该事件是一起针对阿塞拜疆共和国国家石油公司进行的定向攻击活动。此次事件中&…

godot引擎c++源码深度解析系列二

记录每次研究源码的突破&#xff0c;今天已经将打字练习的功能完成了一个基本模型&#xff0c;先来看下运行效果。 godot源码增加打字练习的demo 这个里面需要研究以下c的控件页面的开发和熟悉&#xff0c;毕竟好久没有使用c了&#xff0c;先来看以下代码吧。 //第一排 显示文本…

13、ffmpeg使用nvidia显卡对OAK深度相机进行解码和编码

基本思想&#xff1a;简单使用nvidia的硬件解码进行oak相机的编码和解码学习 一、在本机rtx3060配置好显卡驱动和cuda之后进行下面操作50、ubuntu18.04&20.04CUDA11.1cudnn11.3TensorRT7.2/8.6Deepsteam5.1vulkan环境搭建和YOLO5部署_ubuntu18.04安装vulkan_sxj731533730的…

README.md 文档使用 treer 生成树形项目结构

一、前言 前后端编写 README.md 文档的时候&#xff0c;常常需要描写项目的结构&#xff0c;使用 tree 命令生成的目录又不能忽略某个目录&#xff0c;不方便。后来我找到了可以忽略某些目录的 treer命令 &#xff0c;特此记录一下: 二、使用 treer 生成项目结构 全局安装tr…

Redis 基础知识和核心概念解析:探索 Redis 的数据结构与存储方式

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

攻略|如何成为Moonbeam收集人

Moonbeam与其他PoS机制EVM公链类似&#xff0c;仰赖节点的运营保持网络的顺利运行以及安全。Moonbeam作为同时兼容Substrate和以太坊API的开发平台&#xff0c;同以太坊主网相比仍存在差异。 在Moonbeam的生态中&#xff0c;节点运营者被称为收集人&#xff0c;负责收集来自Mo…

SQLite的应用

2023年7月27日 据我所知&#xff0c;使用了SQLite数据库的软件有&#xff1a; 火狐浏览器Joplin 火狐浏览器 火狐浏览器用SQLite数据库来存储历史记录、访问过的网址等。 Joplin Joplin是GitHub上一个很火的开源记事本软件&#xff0c; Joplin用SQLite来存储笔记里面的文…

Python-Go python模块与包 - GO问题 - GO容量测试

目录 go 模块与包复习&#xff08;Init函数 - go mod&#xff09; init函数有什么用&#xff1f;init函数是什么&#xff1f; go.mod文件是什么&#xff1f;有什么作用&#xff1f; python的模块与包 python中包的分类 1、内置模块&#xff1a;不需要安装&#xff0c;直接…