OPENCV C++(三)二值化灰度函数+调用摄像头+鼠标响应+肤色检测

RGB转灰度函数

cvtColor(image, gray, COLOR_BGR2GRAY);

图像 目标图像 rgb转灰度

大津法二值化函数

threshold(gray, result1, 84, 255, THRESH_OTSU);

灰度图,目标图,阈值,大于阈值的转换的像素值,方法为大津法

自适应二值化

adaptiveThreshold(gray, result2, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY,101,10);

灰度图,目标图,大于阈值的转换的像素值,自适应方法,二值化方法

虽然人物的信息丢失了很多,但是背景基本上被去掉了。丢失的人物的信息可以通过位运算等恢复。在去除背景提取前景方面,自适应阈值函数要有效很多。

blockSize:分割计算的区域大小,取奇数 C:常数,每个区域计算出的阈值的基础上在减去这个常数作为这个区域的最终阈值,可以为负数



创建滑动条改变变量

	imshow("bar", gray);int lowth = 10;int maxth = 255;createTrackbar("thresold", "bar",&lowth, maxth, thresold_mat,&gray );

主函数中的写

第一行是展示窗口

lowth是起始位置大小     maxth是最大的大小

 createTrackbar函数的参数是1 滑动条名称 2创建的窗口名字 3起始地址的位置 4最大值 5函数接口 6改变图像的地址

回调函数

void thresold_mat(int th, void* data) {Mat src = *(Mat*)(data);Mat dst;threshold(src, dst, th, 255,THRESH_BINARY);imshow("bar", dst);
}

后面参数必须得一样 固定格式

传给指针给src src改变也会带动data改变

二值化函数 且显示目标图像

访问电脑摄像头

VideoCapture cap(0);
while (1) {Mat frame;cap >> frame;imshow("frame", frame);waitKey(30);
}

waitkey是每隔30个时间单位就刷新一次画面

frame就是摄像头的画面 一帧画面

检测肤色

VideoCapture cap(0);double i_minH = 0;double i_maxH = 20;double i_minS = 43;double i_maxS = 255;double i_minV = 55;double i_maxV = 255;while (1) {Mat frame;Mat hsvmat;Mat detectmat;cap >> frame;cvtColor(frame, hsvmat, COLOR_BGR2HSV);frame.copyTo(detectmat);inRange(hsvmat, Scalar(i_minH, i_minS, i_minV), Scalar(i_maxH, i_maxS, i_maxV), detectmat);imshow("frame", frame);imshow("detect", detectmat);waitKey(30);}

人体肤色的HSV的区间

double i_minH = 0;double i_maxH = 20;double i_minS = 43;double i_maxS = 255;double i_minV = 55;double i_maxV = 255;

rgb转换HSV函数

cvtColor(frame, hsvmat, COLOR_BGR2HSV);

复制图像另个函数表达 

frame.copyTo(detectmat);

检测区间颜色内的函数

inRange(hsvmat, Scalar(i_minH, i_minS, i_minV), Scalar(i_maxH, i_maxS, i_maxV), detectmat);

在hsvmat图像中检测在区间内的,并二值化,将区间内的变成白色,其他为黑色,存入detectmat

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

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

相关文章

Stable diffusion 三大基础脚本 提示词矩阵,载入提示词,XYZ图表讲解

目录 0.本章讲解 1.提示词矩阵(prompt matrix) 1.2.提示词矩阵功能选项 1.2.1.把可变部分放在提示词文本的开头 1.2.2.为每张图片使用不同随机种子 1.2.3.选择提示词 1.2.4.选择分割符 1.2.5.宫格图边框(像素) 2.从文本框或文件载入提示词(Pro…

【Android ndk内存泄露检测】

1、 google支持方式 (88条消息) Android native memory leak detect (Android native内存泄露检测)_良秋的专栏-CSDN博客_android native 内存泄露 封装 shell 脚本 | Android NDK | Android Developers (google.cn) GitHub - wangwangchen/malloc-debug: study of mall…

获取k8s scale资源对象的命令

kubectl get --raw /apis/<apiGroup>/<apiVersion>/namespaces/<namespaceName>/<resourceKind>/<resourceName>/scale 说明&#xff1a;scale资源对象用来水平扩展k8s资源对象的副本数&#xff0c;它是作为一种k8s资源对象的子资源存在&#xf…

STM32F103——基础篇

目录 1、寄存器基础知识 2、STM32F103系统架构 2.1 Cortex M3 内核&芯片 2.2 STM32F103系统架构 3、存储器映射 4、寄存器映射 4.1 寄存器描述解读 4.2 寄存器映射举例 4.3 寄存器地址计算 4.4 stm32f103xe.h 寄存器映射 1、寄存器基础知识 概念&#xff1a;寄存…

018-从零搭建微服务-系统服务(五)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;https://gitee.com/csps/mingyue 源码地址&#xff08;前端&#xff09;&#xff1a;https://gitee.com/csps…

谈谈对Android音视频开发的探究

在日常生活中&#xff0c;视频类应用占据了我们越来越多的时间&#xff0c;各大公司也纷纷杀入这个战场&#xff0c;不管是抖音、快手等短视频类型&#xff0c;虎牙、斗鱼等直播类型&#xff0c;腾讯视频、爱奇艺、优酷等长视频类型&#xff0c;还是Vue、美拍等视频编辑美颜类型…

局域网部署,用WorkPlus视频会议保密又安全

用户采用私有化部署视频会议软件的情况主要有以下几种因素&#xff1a; 1. 针对机密性高的会议&#xff1a;如果有涉及高度机密的商业谈判或敏感信息交流等重要会议&#xff0c;政府、军工、企业等用户会选择局域网内部署视频会议软件&#xff0c;以保证信息安全。 2. 频繁进…

Tailwind CSS:简洁高效的工具,提升前端开发体验

112. Tailwind CSS&#xff1a;简洁高效的工具&#xff0c;提升前端开发体验 1. 什么是Tailwind CSS&#xff1f; Tailwind CSS是由Adam Wathan、Jonathan Reinink、David Hemphill和Steve Schoger等人共同创建的一种现代CSS框架。与传统的CSS框架不同&#xff0c;Tailwind CS…

尝试一下Guava带返回值的多线程处理类ListenableFuture

文章目录 ListenableFuture&#xff0c;带返回值的Guava多线程处理工具类举个例子扩展阅读 最近在学习&#xff0c;Java实现异步编程的8种方式这篇博客的时候&#xff0c;没有找到比较好的一个学习demo&#xff0c;故在此整理一下。 ListenableFuture&#xff0c;带返回值的Gua…

AtcoderABC228场

A - On and OffA - On and Off 题目大意 一个人每天在指定的时间点打开房间的灯&#xff0c;并在另一个时间点关闭灯。问题是确定在给定的时间点&#xff0c;灯是否亮着。 思路分析 注意时间24小时制&#xff0c;同一天和隔夜两种情况 确定给定的时间点是否在灯亮的时间范围…

C高级【day3】

思维导图&#xff1a; 判断家目录下&#xff0c;普通文件的个数和目录文件的个数&#xff1a; #!/bin/bashvar1(ls -l ~/ | cut -d r -f 1 | grep -i -) var2(ls -l ~/ | cut -d r -f 1 | grep -i d) #echo ${var1[*]} #echo ${var2[*]}echo 普通文件个数&#xff1a;${#var…

Bug的严重等级和优先级别与分类

一、 Bug的严重等级定义&#xff1a; 1、 Blocker 即系统无法执行、崩溃或严重资源不足、应用模块无法启动或异常退出、无法测试、造成系统不稳定。 严重花屏内存泄漏 用户数据丢失或破坏系统崩溃/死机/冻结模块无法启动或异常退出严重的数值计算错误功能设计与需求严重不符其…

激荡十三年,消费金融进入“体验争夺战”的下半场

消费金融行业又开始涌动着变局。 先是一些老玩家悬着的心&#xff0c;终于落地。过去两年&#xff0c;消费金融是蚂蚁集团整改的关键板块。前不久&#xff0c;蚂蚁集团被监管部门开出71.23亿元的“罚单”&#xff0c;市场普遍认为这是利空出尽的信号。 与此同时&#xff0c;竞…

微服务-nacos配置管理

Nacos配置管理 统一配置管理&#xff1a;一次配置更改并支持热更新。将核心配置存储到配置管理服务&#xff0c;当微服务启动时会自动读取配置管理服务中的配置信息并结合本地配置启动。当配置改动时&#xff0c;配置管理服务会自动通知微服务&#xff0c;微服务读取新配置并自…

给Java程序加入许可证:保护我们的代码

在软件开发过程中&#xff0c;保护您的Java程序免受未经授权的使用是非常重要的。一种常见的方法是通过为您的程序添加许可证来限制其使用。本文将介绍如何使用机器码生成许可证&#xff0c;只有拥有正确许可证的用户才能启动您的程序。 什么是机器码&#xff1f; 机器码是计…

Zebec Payroll :计划推出 WageLink On-Demand Pay,进军薪酬发放领域

“Zebec Protocol 生态旨以 Web3 的方式建立全新的公平秩序&#xff0c;基于其流支付体系构建的薪酬支付板块&#xff0c;就是解决问题的一把利刃” Zebec Protocol 在创立之初就有着一个十分宏大的愿景&#xff0c;其希望通过 Web3 的方式来进一步打破世界上一些不公平现象。 …

【力扣】21. 合并两个有序链表 <链表指针>

【力扣】21. 合并两个有序链表 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例1 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4] 示例 2 输入&#xff1a;l1 [], l2 [] 输出&#xff1a;…

华为云低代码平台Astro Canvas 搭建汽车展示大屏——实验指导手册

实验背景 大屏应用Astro Canvas是华为云低代码平台Astro的子服务之一&#xff0c;是以数据可视化为核心&#xff0c;以屏幕轻松编排&#xff0c;多屏适配可视为基础&#xff0c;用户可通过图形化界面轻松搭建专业水准的数据可视化大屏。例如汽车展示大屏、监控大屏、项目开发大…

华为QinQ技术的基本qinq和灵活qinq 2种配置案例

基本qinq配置&#xff1a; 运营商pe设备在收到同一个公司的ce发来的的包&#xff0c;统一打上同样的vlan &#xff0c;如上图&#xff0c;同一个家公司两边统一打上vlan 2&#xff0c;等于在原内网vlan 10或20过来的包再统一打上vlan 2的标签&#xff0c;这样传输就不会和其它…