同学帮改肤色检测(未完成版)

直接代码:

#include "cv.h"
#include "highgui.h"

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>

#include <iostream>
#include <string>
#include <cstdio>

using namespace std;
using namespace cv;

// implementation of otsu algorithm
// author: onezeros#yahoo.cn
// reference: Rafael C. Gonzalez. Digital Image Processing Using MATLAB
void cvThresholdOtsu(IplImage* src, IplImage* dst)
{
	int height=src->height;
	int width=src->width;

	Mat ycrcb
	double sum_Cr=0;
	for(int i=0;i < ycrcb.rows;i++){
		for(int j=0;j < ycrcb.cols;j++){
			int sky,skcr,skcb;			//三个通道的值
			sum_Cr +=  (int) ycrcb.at<Vec3b>(i,j)[1];

		}
	}

	//histogram
	float histogram[256]={0};
	for(int i=0;i<height;i++) {
		unsigned char* p=(unsigned char*)src->imageData+src->widthStep*i;
		for(int j=0;j<width;j++) {
			histogram[*p++]++;
		}
	}
	//normalize histogram
	int size=height*width;
	for(int i=0;i<256;i++) {
		histogram[i]=histogram[i]/size;
	}

	//average pixel value
	float avgValue=0;
	for(int i=0;i<256;i++) {
		avgValue+=i*histogram[i];
	}

	int threshold;
	float maxVariance=0;
	float w=0,u=0;
	for(int i=0;i<256;i++) {
		w+=histogram[i];
		u+=i*histogram[i];

		float t=avgValue*w-u;
		float variance=t*t/(w*(1-w));
		if(variance>maxVariance) {
			maxVariance=variance;
			threshold=i;
		}
	}
	threshold=131;
	cout<<"threshold == "<<threshold<<endl;
	cvThreshold(src,dst,threshold,255,CV_THRESH_BINARY);
}

void cvSkinOtsu(IplImage* src, IplImage* dst)//Mat &
{
	assert(dst->nChannels==1&& src->nChannels==3);

	IplImage* ycrcb=cvCreateImage(cvGetSize(src),8,3);
	IplImage* cr=cvCreateImage(cvGetSize(src),8,1);
	cvCvtColor(src,ycrcb,CV_BGR2YCrCb);//cvtColor
	//show ycrcb
	cvShowImage("ycrcb",ycrcb);

	//vector<Point> mv[3];
	//split(ycrcb , mv);

	cvSplit(ycrcb,0,cr,0,0);//split

	cvThresholdOtsu(cr,cr);
	cvShowImage("out2",cr);//show

	cvSaveImage("out.jpg",cr);//imwrite

	//cvWaitKey(0);
	//cvCopyImage(cr,dst);

	//cvReleaseImage(&cr);
	cvReleaseImage(&ycrcb);
}

int main()
{
	IplImage* img = cvLoadImage( "zcr.jpg" );
	//out用以保存输出图像
	/*IplImage * out = cvCreateImage(
		cvGetSize(img),
		IPL_DEPTH_8U,
		3
	);*/

	IplImage * out;

	cvShowImage("in",img);
	cvSkinOtsu(img,out);
	//cvShowImage("out",out);

	cvWaitKey(0);

	cvReleaseImage(&img);//用完清理
	//cvReleaseImage(&out);//用完清理
	cvDestroyWindow("in");
	cvDestroyWindow("out");

	return 0;
}
时间: 2024-12-27 19:46:43

同学帮改肤色检测(未完成版)的相关文章

css百度分享-请高手帮改一个CSS代码 让百度分享和文章链接并排

问题描述 请高手帮改一个CSS代码 让百度分享和文章链接并排 .Article-Tool{ border:1px solid #c3d4e7; position:relative; top:-1px; text-align:right; padding:8px; vertical-align:middle; height:15px; background-color:#f4f8fd} .Article-Tool a{width:16px;height:16px;line-height:16px;

WebRTC 国内不翻墙下载编译Linux\Android版,已下23G【未完成版】

WebRTC 国内不翻墙下载编译Linux\Android版,已下23G[未完成版] mkdir /webrtccd /webrtcgit clone https://source.codeaurora.org/quic/lc/chromium/tools/depot_tools.gitexport PATH=`pwd`/depot_tools:"$PATH"cd depot_tools 下载webrtc fetch过的Android版(http://pan.baidu.com/s/1

OpenCV肤色检测

前三种方式转载:http://blog.csdn.net/onezeros/article/details/6342567   第一种:RGB color space 第二种:RG color space 第三种:Ycrcb之cr分量+otsu阈值化 第四种:YCrCb中133<=Cr<=173 77<=Cb<=127 第五种:HSV中 7<H<29  下一步需要滤波操作 因为检测结果中有许多瑕疵 [cpp] view plaincopy #include "

recyclerview-进入页面虚拟机崩溃,找不到错误,求大神帮改下源码,谢谢啦

问题描述 进入页面虚拟机崩溃,找不到错误,求大神帮改下源码,谢谢啦 import android.app.Activity;import android.os.AsyncTask;import android.os.Bundle;import android.support.v7.widget.DefaultItemAnimator;import android.support.v7.widget.RecyclerView;import android.support.v7.widget.Sta

自己做的一个肤色检测模型

肤色检测 在人像美化中,肤色检测有助于防止磨掉头发.胡子等需要保持细节的部分,也可以使美白算法仅作用于皮肤,不对人像周边环境产生影响. 网上找了一下肤色检测模型,效果都太差,换了一种思维,找个训练集,自己做一个. 训练结果,正确率大概85%,运行起来,确实还是比网上找的公式好,勉强可用了. 模型 算法最终反映为 opengl 的一个片断着色器,直接看shader代码吧. varying vec2 textureCoordinate; uniform sampler2D inputImageTex

各位大神请帮忙,我对id对应关系和参数设置不怎么懂,所以求帮改下下列代码,谢谢

问题描述 各位大神请帮忙,我对id对应关系和参数设置不怎么懂,所以求帮改下下列代码,谢谢 下边是我JSP的代码,我想点击"其他参数设置"设置连接时跳到"其他参数设置"Edit的编辑里,而不是跳到List里.能不能帮我把这段代码的"其他参数设置"连接修改下. "其他参数设置"Edit编辑的网页参数是: http://localhost:8082/ym//Module/QTCSSZ/Edit.action?id=5&ifr

12306动态验证码改为划线静态版

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 12306动态验证码改为划线静态版 [TechWeb报道]1月5日消息,铁路客服中心12306的动态验证码经过一轮用户吐槽和媒体报道后,12306将验证码改为了加强版的静态版,即增加了干扰横线的动态验证码.相比于不停抖动的动态验证码,此次划线静态版验证码确实不再那么难认了. 此前12306的验证码由于被指太简单不安全,抢票软件能够轻松识别验证

【肤色检测(II)】Mat版

将之前写的 (I) 中的内容改成了 Mat 版本: //opencv2.0风格 #include "cv.h" #include "highgui.h" #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/core/core.hpp> #include <iostream> #in

深圳首个综改试验区破土 特区版图谋扩容

<深圳综合配套改革试验总体方案>(以下简称<深圳综改方案>)以"深圳速度"获批.知情人士昨日向本报透露,方案5月初获批后已下发深圳市相关政府部门,暂未对外正式公布,深圳成为现有7个综改试验区中,综改方案获批等待时间最短的一个试验区.从而标志着深圳成为名副其实的国家综合改革试验区. 这位消息人士透露,<深圳综改方案>赋予深圳在经济体制改革.社会领域体制改革.行政管理体制改革.完善自主创新的体制机制等重点领域和关键环节进行综合配套改革,"但只是