Opencv基础代码:根据颜色进行目标检测
2016-01-23 15:12
591 查看
在Opencv中,有很多运动算法是根据相邻几帧图片来进行运动目标检测的,但这样有可能效率不高或者是效果不够好,所以就有了根据颜色来进行目标匹配来进行运动目标检测的。
转载自:http://blog.sina.com.cn/s/blog_6111ce890100q0pm.html
#include <cv.h> #include <highgui.h> // 进行肤色检测 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);//通道的中间变量,用于肤色检测的中间变量 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 );//颜色转换 cvCvtPixToPlane(hsv,H,S,V,0);//分为3个通道 cvInRangeS(H,cvScalar(0.0,0.0,0,0),cvScalar(20.0,0.0,0,0),tmpH1); cvInRangeS(S,cvScalar(75.0,0.0,0,0),cvScalar(200.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(0.0,0.0,0,0),cvScalar(13.0,0.0,0,0),tmpH2); cvInRangeS(S,cvScalar(20.0,0.0,0,0),cvScalar(90.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); cvReleaseImage(&hsv); cvReleaseImage(&tmpH1); cvReleaseImage(&tmpS1); cvReleaseImage(&tmpH2); cvReleaseImage(&tmpS2); cvReleaseImage(&tmpH3); cvReleaseImage(&tmpS3); cvReleaseImage(&H); cvReleaseImage(&S); cvReleaseImage(&V); cvReleaseImage(&src_tmp1); } int main(int argc, char* argv[]) { IplImage *src=cvLoadImage("hand.jpg", CV_LOAD_IMAGE_COLOR); cvNamedWindow("src", CV_WINDOW_AUTOSIZE); cvShowImage("src", src); cvNamedWindow("flip", CV_WINDOW_AUTOSIZE); IplImage *dsc = cvCreateImage(cvGetSize(src), src->depth, 1); // 以x轴翻转 SkinDetect(src, dsc); // cvFlip(src, dsc, 1); cvShowImage("flip", dsc); cvWaitKey(0); cvDestroyAllWindows(); cvReleaseImage(&src); printf("Hello World!\n"); return 0; }
转载自:http://blog.sina.com.cn/s/blog_6111ce890100q0pm.html
相关文章推荐
- [Maven实战](4)eclipse创建Maven项目
- php中对象的串行化
- 转载:简单介绍Python中的try和finally和with方法
- JAVA拖拽选择文件
- 91. php 命名空间(1)
- SourceInsight支持Python代码阅读
- PHP date函数输出时间少8小时的解决方法
- java抽象类
- 最常用的15大Eclipse开发快捷键技巧
- 按位dp初步
- Python 批量修改图片格式和尺寸
- php获取访客所在城市名称代码
- struts2 笔记04 杂记
- SpringMVC使用了@ResponseBody报406错误的问题(1)
- ASP.NET MVC 过滤器详解
- Go语言入门(三)——map
- dedecms中提取的zip压缩文件操作类zip.class.php
- 【委托】——动态决定使用何方法
- Java设计模式之策略模式(一)
- Java设计模式之策略模式(一)