OpenCv学习笔记

    11月份有一个项目需要用到手势识别功能,google之,大爱OpenCv,记录下自己的学习历程,让我们为互联网的开源精神Cheers.

   

    项目采用Qt + Opencv + win7环境下实现 

  

 一、

   首先我们要 win7下配置OpenCV的Qt开发环境,具体参考如下

  http://blog.csdn.net/qiurisuixiang/article/details/8665278

   当你的test code 成功实现一张图片显示的时候,congratulate you,你的环境已经搭建成功了。

二、

   做完初步的环境搭建,让我们来做一些好玩的事情,实现对一个物体的背景轮廓分离。这里我采用了大津算法,初步实现了背景和背景的分离。

   贴Code

  

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


void cvThresholdOtsu(IplImage* src, IplImage* dst)
{
    int height=src->height;
    int width=src->width;


    //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;
        }
    }


    cvThreshold(src,dst,threshold,255,CV_THRESH_BINARY);//设置阈值
}


void cvSkinOtsu(IplImage* src, IplImage* dst)
{
    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);
    cvSplit(ycrcb,0,cr,0,0);


    cvThresholdOtsu(cr,cr);
    cvCopyImage(cr,dst);
    cvReleaseImage(&cr);
    cvReleaseImage(&ycrcb);
}


int main(int argc,char *argv[])
{
    IplImage *src=cvLoadImage("E:/hand.jpg",1);
    IplImage *binary_img=cvCreateImage(cvGetSize(src),8,1);
    cvSkinOtsu(src, binary_img);
    CvMemStorage *pcvMStorage = cvCreateMemStorage();
    CvSeq *pcvSeq = NULL;
    cvFindContours(binary_img, pcvMStorage, &pcvSeq, sizeof(CvContour),\
                       CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, cvPoint(0, 0));


    IplImage *pOutlineImage = cvCreateImage(cvGetSize(binary_img), IPL_DEPTH_8U, 3);
    cvDrawContours(pOutlineImage, pcvSeq, CV_RGB(255,0,0), CV_RGB(0,255,0), 5, 2);


    cvNamedWindow("Image",1);
    cvNamedWindow("binary",1);
    cvNamedWindow("end",1);


    cvShowImage("Image",src);
    cvShowImage("binary",binary_img);
    cvShowImage("end", pOutlineImage);


    cvWaitKey(0);
    cvDestroyWindow("Image");
    cvReleaseImage(&src);
    cvDestroyWindow("binary");
    cvReleaseImage(&binary_img);
    cvDestroyWindow("end");
    cvReleaseImage(&pOutlineImage);
    return 0;
}

 

通过以上代码我们可以实现初步的轮廓提取,贴上一张图



具体的实现算法google之,简要概括就是通过类间方差识别出手掌和背景的分离指标,用这个算出手掌和背景的分离阈值,从而对图像二值化,最后使用cvFindContours对二值化图像寻找轮廓显示。未完待续。


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值