OpenCV编程-肤色检测

2024-02-14 23:48
文章标签 opencv 检测 编程 肤色

本文主要是介绍OpenCV编程-肤色检测,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


    最近搞色彩认知计算,对于肤色检测也是兴趣使然。

     

     我们在处理图像时,首先考虑的就是去噪,但是去噪不仅是去掉噪声,也需要考虑光照对图像造成的噪声,所以如果硬件跟得上的话,可以引入颜色恒常性计算来去噪,之后开始正题吧。

     肤色检测说起来很简单,只要是色彩的空间分离,在这个过程中难免有误检,如果对目标能进行有监督的框定,再进行肤色检测,效果应该好很多。 

     接下来贴代码:

  
void SkinDetect(IplImage* src,IplImage* dst)   
{   // 创建图像头IplImage* hsv = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 3);//用于存图像的个中间变量,是用来分通道用的,分成hsv通道   IplImage* tmpH1 = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1);//通道的中间变量,用于肤色检测的中D间变量   IplImage* tmpS1 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);   IplImage* tmpH2 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);   IplImage* tmpS3 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);   IplImage* tmpH3 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);   IplImage* tmpS2 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);   IplImage* H = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1);   IplImage* S = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1);   IplImage* V = cvCreateImage( cvGetSize(src), IPL_DEPTH_8U, 1);     IplImage* src_tmp1=cvCreateImage(cvGetSize(src),8,3);   // 高斯模糊 cvSmooth(src,src_tmp1,CV_GAUSSIAN,3,3); //高斯模糊   // hue色度saturation饱和度value纯度   cvCvtColor(src_tmp1, hsv, CV_BGR2HSV );//颜色转换 cvSplit(hsv,H,S,V,0);//分为3个通道   /*********************肤色检测部分·**************/  cvInRangeS(H,cvScalar(26.0,0.0,0,0),cvScalar(34.0,0.0,0,0),tmpH1);   cvInRangeS(S,cvScalar(43.0,0.0,0,0),cvScalar(255.0,0.0,0,0),tmpS1);   cvAnd(tmpH1,tmpS1,tmpH1,0);   // Red Hue with Low Saturation   // Hue 0 to 26 degree and Sat 20 to 90   cvInRangeS(H,cvScalar(11.0,0.0,0,0),cvScalar(25.0,0.0,0,0),tmpH2);    cvInRangeS(S,cvScalar(43.0,0.0,0,0),cvScalar(255.0,0.0,0,0),tmpS2);   cvAnd(tmpH2,tmpS2,tmpH2,0);   // Red Hue to Pink with Low Saturation   // Hue 340 to 360 degree and Sat 15 to 90   //    cvInRangeS(H,cvScalar(170.0,0.0,0,0),cvScalar(180.0,0.0,0,0),tmpH3);   //    cvInRangeS(S,cvScalar(15.0,0.0,0,0),cvScalar(90.,0.0,0,0),tmpS3);   //    cvAnd(tmpH3,tmpS3,tmpH3,0);   // Combine the Hue and Sat detections   //    cvOr(tmpH3,tmpH2,tmpH2,0);   cvOr(tmpH1,tmpH2,tmpH1,0);   cvCopy(tmpH1,dst);   int avg,white=0,black=0;CvScalar s;for(int i=0;i<dst->height;i++){for (int j = 0;j<dst->width;j++){s = cvGet2D(dst,i,j);if(s.val[0]==255)white++;elseblack++;}}printf("white = %dn",white);printf("black = %dn",black);cvReleaseImage(&hsv);   cvReleaseImage(&tmpH1);   cvReleaseImage(&tmpS1);   cvReleaseImage(&tmpH2);   cvReleaseImage(&tmpS2);   cvReleaseImage(&tmpH3);   cvReleaseImage(&tmpS3);   cvReleaseImage(&H);   cvReleaseImage(&S);   cvReleaseImage(&V);   cvReleaseImage(&src_tmp1);   
}   

测试图像:



得到的图像虽然不好,相信从代码里面能看到原因。




    

这篇关于OpenCV编程-肤色检测的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/709909

相关文章

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

opencv 滚动条

参数介绍:createTrackbar( trackbarname , "hello" , &alpha_slider ,alpha_max ,  on_trackbar )  ;在标签中显示的文字(提示滑动条的用途) TrackbarName创建的滑动条要放置窗体的名字 “hello”滑动条的取值范围从 0 到 alpha_max (最小值只能为 zero).滑动后的值存放在

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。