基于头部跟踪初代码测试

#include "iostream"
#include "queue"
#include "Windows.h"

#include <opencv2/ml/ml.hpp>
#include "opencv2/opencv.hpp"
#include "Windows.h"
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/features2d/features2d.hpp"
#include "opencv2/calib3d/calib3d.hpp"
#include "opencv2/ml.hpp"
#include "opencv/cv.h"
#include "opencv/ml.h"
#define MAX 30
using namespace cv;
using namespace std;

//画直方图用
int HistogramBins = 256;
float HistogramRange1[2] = { 0, 255 };
float *HistogramRange[1] = { &HistogramRange1[0] };

/*
* imagefile1:
* imagefile2:
* method: could be CV_COMP_CHISQR, CV_COMP_BHATTACHARYYA, CV_COMP_CORREL, CV_COMP_INTERSECT
*/

double CompareHist(IplImage *image1, IplImage *image2)
{

    CvHistogram *Histogram1 = cvCreateHist(1, &HistogramBins, CV_HIST_ARRAY, HistogramRange);
    CvHistogram *Histogram2 = cvCreateHist(1, &HistogramBins, CV_HIST_ARRAY, HistogramRange);

    cvCalcHist(&image1, Histogram1);
    cvCalcHist(&image2, Histogram2);

    cvNormalizeHist(Histogram1, 1);
    cvNormalizeHist(Histogram2, 1);

    // CV_COMP_CHISQR,CV_COMP_BHATTACHARYYA这两种都可以用来做直方图的比较,值越小,说明图形越相似
    return cvCompareHist(Histogram1, Histogram2, CV_COMP_CHISQR);
    //printf("CV_COMP_BHATTACHARYYA : %.4f\n", cvCompareHist(Histogram1, Histogram2, CV_COMP_BHATTACHARYYA));

    // CV_COMP_CORREL, CV_COMP_INTERSECT这两种直方图的比较,值越大,说明图形越相似
    //printf("CV_COMP_CORREL : %.4f\n", cvCompareHist(Histogram1, Histogram2, CV_COMP_CORREL));
    //printf("CV_COMP_INTERSECT : %.4f\n", cvCompareHist(Histogram1, Histogram2, CV_COMP_INTERSECT));

    //cvReleaseImage(&image1);
    //cvReleaseImage(&image2);
    cvReleaseHist(&Histogram1);
    cvReleaseHist(&Histogram2);
}
Mat Getmat(Mat mat, Rect rect)
{
    return mat(rect);
}
int main()
{

    VideoCapture video(0);

    if (!video.isOpened())
    {
        return -1;
    }
    Mat img;
    Mat img1,img2;
    int num = 0;
    Rect rect(270, 130, 120, 160), rected[MAX];
    //int diswidth[MAX] = { 1, 1, 0, -1, -1, -1, 0, 1, 2, 2, 0, -2, -2, -2, 0, 2};
    //int dishigth[MAX] = { 0, 1, 1, 1, 0, -1, -1, -1, 0, 2, 2, 2, 0, -2, -2, -2};
    int rang = 0;
    int diswidth[MAX];
    int dishigth[MAX];
    for (int i = -2; i <= 2; i++)
    {
        for (int j = -2; j <= 2; j++)
        {
            if (i == 0 && j == 0)
                continue;
            diswidth[rang] = i;
            dishigth[rang] = j;
            rang++;
        }
    }

    int mul = 2;
    double ans=0,minans;
    int id;
    IplImage frame1, frame2;
    IplImage *pframe1=NULL, *pframe2=NULL;
    IplImage *pgrayframe1 = NULL, *pgrayframe2 = NULL;
    /*
    cv::Mat img2;
    IplImage imgTmp = img2;
    IplImage *input = cvCloneImage(&imgTmp);
    */
    int i;
    //get first
    video >> img;
    img1 = Getmat(img, rect);
    pframe1 = &(IplImage(img1));
    pgrayframe1 = cvCreateImage(cvGetSize(pframe1), IPL_DEPTH_8U, 1);
    pgrayframe2 = cvCreateImage(cvGetSize(pframe1), IPL_DEPTH_8U, 1);
    cvCvtColor(pframe1, pgrayframe1, CV_BGR2GRAY);
    while (1)
    {
        video >> img;

        minans = 0x3f3f3f3f;
        id = 0;
        for (i = 0; i < rang; i++)
        {
            rected[i] = rect;
            rected[i].x += diswidth[i] * mul;
            rected[i].y += dishigth[i] * mul;

            rected[i].x = rected[i].x>0 ? rected[i].x : 0;
            rected[i].y = rected[i].y>0 ? rected[i].y : 0;
            rected[i].x = rected[i].x + rected[i].width <img.cols ? rected[i].x : img.cols-rected[i].width;
            rected[i].y = rected[i].y + rected[i].height<img.rows ? rected[i].y : img.rows-rected[i].height;
            img2 = Getmat(img, rected[i]);
            pframe2 = &(IplImage(img2));

            cvCvtColor(pframe2, pgrayframe2, CV_BGR2GRAY);

            ans = CompareHist(pgrayframe1, pgrayframe2);

            if (ans < minans)
            {
                minans = ans;
                id = i;
            }
        }

        rect = rected[id];

        img1 = Getmat(img, rect);
        //frame1 = img1;
        //pframe1 = cvCloneImage(&frame1);
        pframe1 = &(IplImage(img1));
        cvCvtColor(pframe1, pgrayframe1, CV_BGR2GRAY);

        rectangle(img, rect, Scalar(0, 255, 0), 1);

        //imshow("vi", img1);
        //imshow("vi1", img2);
        //printf("%.7lf\n", ans);
        //img1 = img(rect);
        imshow("video", img);

        if (waitKey(25) > 0)
        {
            break;
        }
    }

    return 0;
}
时间: 2024-08-02 02:48:54

基于头部跟踪初代码测试的相关文章

基于Spring+IDEA+Maven搭建测试项目

一.背景介绍 1.1公司相关技术 Git:是一款免费的开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,方便多人集成开发 Maven:是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具,同时还提供了高级项目管理工具 Jira:是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪.客户服务.需求收集.流程审批.任务跟踪.项目跟踪和敏捷管理等工作领域 Dubbo:是阿里巴巴公司一个开源的分布式服务框架,致力于提供高性能和

20种源代码测试工具

本文推荐并点评了软件开发测试中经常使用的20种源代码测试工具,能够帮助大部分人解决测试问题. AQtime--该产品含有完整的性能和调试工具集,能够收集程序运行时关键的性能信息和内存/资源分配信息,并提交概要报告和详细报告,还提供所有的程序优化处理工具,囊括了自定义过滤器.图形化的调用层次结构一直到源代码浏览等内容 AdaTEST--一款针对于Ada应用程序的覆盖率测试.静态测试和动态测试工具 BoundsChecker--为C++开发者而生的运行时错误检测和调试工具,支持C/C++..Net.

可进行JavaScript代码测试与调试的12个网站

概述:JavaScript是网站前端开发最为重要的一门编程语言,本文收集了能够在线测试与调试JavaScript代码的12个网站 1.JS Bin JS bin是一个为JavaScript和CSS爱好者们提供特定情况下的代码片段测试的网站.它可以让你和你的同伴合作调试代码.你可以在这里编辑和测试JavaScript和HTML代码,一旦你觉得满意,可以把相关的网址发送给你的同伴,以获取他们的看法和帮助. 2.JS Nice JS Nice 是一个用于JavaScript的反代码混淆以及反极简主义的

基于python的性能负载测试Locust-1 简介

官网: http://locust.io/GitHub: https://github.com/locustio/locust 简介 Locust 是一个开源负载测试工具.使用 Python 代码定义用户行为,也可以仿真百万个用户.Locust 是非常简单易用,分布式,用户负载测试工具.Locust 主要为网站或者其他系统进行负载测试,能测试出一个系统可以并发处理多少用户.Locust 是完全基于时间的,因此单个机器支持几千个并发用户.相比其他许多事件驱动的应用,Locust 不使用回调,而是使

Android实现基于http协议的文件下载测试

  概述   网络编程中文件的上传下载是最常见的场景,本着不重复造轮子的原则,日常工作如果遇到相关问题我们首先想到的可能是从网上找现成的代码直接拿来用,很少去关心具体是如何实现的,可能也是没时间去研究别人如何实现.如果代码能够满足我们现阶段的要求,则万事大吉,但是如果使用代码的过程中出现意想不到的问题,我们解决起来可能会比较麻烦,因为代码不是我们自己写的,对代码不熟,不能快速的查找问题的原因.个人认为不重复造轮子的前提是你必须有能力造一个相同的轮子,这样在使用别人的代码时才能更加得心应手.   

Jquery中,关于固定头部菜单条代码(摘)

$(function () { $(window).scroll(function () { if ($(window).scrollTop() >= 150) { //加入fixedNavCSS样式 $(".Dp-Navbar").addClass("fixedNav"); } else { //去除fixedNavCSS样式 $(".Dp-Navbar").removeClass("fixedNav");      

Nodejs开源项目里怎么样写测试、CI和代码测试覆盖率

测试 目前主流的就bdd和tdd,自己查一下差异 推荐 mocha和tape 另外Jasmine也挺有名,angularjs用它,不过挺麻烦的,还有一个选择是qunit,最初是为jquery测试写的,在nodejs里用还是觉得怪怪的. 如果想简单可以tap,它和tape很像,下文会有详细说明 mocha mocha是tj写的 https://github.com/mochajs/mocha var assert = require("assert") describe('truth',

20个最强的基于浏览器的在线代码编辑器

20个最强的基于浏览器的在线代码编辑器,你听过或者用过吗? 1. Compilr Compilr是一个在线编译器和在线IDE.可以用它来开发PHP, C, C++, Ruby.在浏览器中编译Java, C# 和 VB.net等. 马上使用 2. Dabblet 跨浏览器兼容,对前端攻城师们来说是一个不得不处理的问题.为了在浏览器间呈现统一的显示效果,攻城师们不仅要为每个游览器添加CSS前缀,甚至还需要用到一些特殊的CSS Hack技巧.于是,jsFiddle.JSBin等前端代码的在线测试工具应

多环境多需求并行下的代码测试覆盖率统计工具实现

马蜂窝技术原创内容,更多干货请关注公众号:mfwtech 测试覆盖率常被用来衡量测试的充分性和完整性,也是测试有效性的一个度量.「敏捷开发」的大潮之下,如何在快速迭代的同时保证对被测代码的覆盖度和产品质量,是一个非常有挑战性的话题. 在马蜂窝大交通.酒店等交易相关业务中,项目的开发和测试实践同样遵循敏捷的原则,迭代周期短.速度快.因此,如何依据测试覆盖率数据帮助我们有效判断项目质量.了解测试状态.提升迭代效率,是我们一直很重视的工作. Part.1 测试覆盖率统计中的挑战 对于功能测试而言,通常