天嵌 ARM开发社区

 找回密码
 注册
查看: 5444|回复: 15

视频监控系统 V0.0.3

[复制链接]
xingyuan 发表于 2012-11-21 22:52:24 | 显示全部楼层 |阅读模式
  本系统从摄像头实时采集视频并显示。系统使用Qt开发。
  本系统支持多平台多操作系统,在Windows系统下使用OpenCV的一些库函数进行视频采集。在Linux系统下使用V4L进行视频采集。
  在以下环境测试运行:Windows: Qt 4.4.3,Linux: qt-embedded-linux-opensource-src-4.4.1
有MPEG4视频的录制与播放。  vms-0.0.3.zip

评分

参与人数 2 +30 收起 理由
njyhf + 10
cepoly + 20 赞一个!

查看全部评分

 楼主| xingyuan 发表于 2012-11-21 22:54:56 | 显示全部楼层
欢迎改进源码!大家互相学习。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 1 反对 0

使用道具 举报

微笑、掩盖忧伤 发表于 2012-11-22 01:16:41 | 显示全部楼层
看看:lol:lol:lol:lol:lol:lol:lol:lol:lol:lol
亚瑟王 发表于 2012-11-22 10:21:19 | 显示全部楼层
xingyuan 发表于 2012-11-21 22:54
欢迎改进源码!大家互相学习。

亲,给你送了10个金币做奖励,希望再接再厉。
-_-!_井 发表于 2012-11-23 14:04:16 | 显示全部楼层
额,能说说怎么用吗?。。。
 楼主| xingyuan 发表于 2012-11-24 09:55:57 | 显示全部楼层
里面有doc文档操作,先要做xvid安装编译工作,然后qmake,make,make install,可执行文件vms就出来了。
ww110052181 发表于 2012-11-24 13:35:04 | 显示全部楼层
:):):):):):):):)
24号杀手 发表于 2012-11-24 22:23:04 | 显示全部楼层
:lol学习学习  嘿嘿
yangguangnanhai 发表于 2012-11-25 15:17:54 | 显示全部楼层
做的不错!
yangguangnanhai 发表于 2012-11-25 15:27:58 | 显示全部楼层
视频格式可以存储为mpeg4 格式。这块实现难吗。不怎么懂啊?
496812749 发表于 2012-11-25 15:34:51 | 显示全部楼层
支持共享,互相学习:)
cepoly 发表于 2012-11-25 17:25:32 | 显示全部楼层
本帖最后由 cepoly 于 2012-11-25 17:32 编辑

请问编译了linux-arm-g++环境下的OpenCV库了吗?有移植到ARM上实现了吗?我已经在linux上实现了opencv的编译,完成了人脸识别的测试。现在想移植到TQ2440板子上,但linux-arm-g++环境下的OpenCV库编译出现了错误,有哪位有编译移植过的,请教,谢谢
以下是人脸识别测试代码,在linux下运行。
#include "cv.h"
#include "highgui.h"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <math.h>
#include <float.h>
#include <limits.h>
#include <time.h>
#include <ctype.h>

#ifdef _EiC
#define WIN32
#endif

static CvMemStorage* storage = 0;
static CvHaarClassifierCascade* cascade = 0;

void detect_and_draw( IplImage* image );

const char* cascade_name =
"haarcascade_frontalface_alt.xml";
/* "haarcascade_profileface.xml";*/

int main( int argc, char** argv )
{
    CvCapture* capture = 0;
    IplImage *frame, *frame_copy = 0;
    int optlen = strlen("--cascade=");
    const char* input_name;

    if( argc > 1 && strncmp( argv[1], "--cascade=", optlen ) == 0 )
    {
        cascade_name = argv[1] + optlen;
        input_name = argc > 2 ? argv[2] : 0;
    }
    else
    {
        cascade_name = "../../data/haarcascades/haarcascade_frontalface_alt2.xml";
        input_name = argc > 1 ? argv[1] : 0;
    }

    cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );

    if( !cascade )
    {
        fprintf( stderr, "ERROR: Could not load classifier cascade\n" );
        fprintf( stderr,
        "Usage: facedetect --cascade=\"<cascade_path>\" [filename|camera_index]\n" );
        return -1;
    }
    storage = cvCreateMemStorage(0);

    if( !input_name || (isdigit(input_name[0]) && input_name[1] == '\0') )
    capture = cvCaptureFromCAM( !input_name ? 0 : input_name[0] - '0' );
    else
    capture = cvCaptureFromAVI( input_name );

    cvNamedWindow( "result", 1 );

    if( capture )
    {
        for(;;)
        {
            if( !cvGrabFrame( capture ))
                break;
            frame = cvRetrieveFrame( capture );
            if( !frame )
                break;
            if( !frame_copy )
                frame_copy = cvCreateImage( cvSize(frame->width,frame->height),
                IPL_DEPTH_8U, frame->nChannels );
            if( frame->origin == IPL_ORIGIN_TL )
                cvCopy( frame, frame_copy, 0 );
            else
                cvFlip( frame, frame_copy, 0 );

            detect_and_draw( frame_copy );

            if( cvWaitKey( 10 ) >= 0 )
                break;
        }

        cvReleaseImage( &frame_copy );
        cvReleaseCapture( &capture );
    }
    else
    {
        const char* filename = input_name ? input_name : (char*)"lena.jpg";
        IplImage* image = cvLoadImage( filename, 1 );

        if( image )
        {
            detect_and_draw( image );
            cvWaitKey(0);
            cvReleaseImage( &image );
        }
        else
        {
            /* assume it is a text file containing the
            list of the image filenames to be processed - one per line */
            FILE* f = fopen( filename, "rt" );
            if( f )
            {
                char buf[1000+1];
                while( fgets( buf, 1000, f ) )
               {
                   int len = (int)strlen(buf);
                   while( len > 0 && isspace(buf[len-1]) )
                   len--;
                   buf[len] = '\0';
                   image = cvLoadImage( buf, 1 );
                   if( image )
                   {
                       detect_and_draw( image );
                       cvWaitKey(0);
                       cvReleaseImage( &image );
                   }
               }
               fclose(f);
            }
        }

    }

    cvDestroyWindow("result");

    return 0;
}

void detect_and_draw( IplImage* img )
{
    static CvScalar colors[] =
    {
        {{0,0,255}},
        {{0,128,255}},
        {{0,255,255}},
        {{0,255,0}},
        {{255,128,0}},
        {{255,255,0}},
        {{255,0,0}},
        {{255,0,255}}
    };

    double scale = 1.3;
    IplImage* gray = cvCreateImage( cvSize(img->width,img->height), 8, 1 );
    IplImage* small_img = cvCreateImage( cvSize( cvRound (img->width/scale),
    cvRound (img->height/scale)),
    8, 1 );
    int i;

    cvCvtColor( img, gray, CV_BGR2GRAY );
    cvResize( gray, small_img, CV_INTER_LINEAR );
    cvEqualizeHist( small_img, small_img );
    cvClearMemStorage( storage );

    if( cascade )
    {
        double t = (double)cvGetTickCount();
        CvSeq* faces = cvHaarDetectObjects( small_img, cascade, storage,
        1.1, 2, 0/*CV_HAAR_DO_CANNY_PRUNING*/,
        cvSize(30, 30) );
        t = (double)cvGetTickCount() - t;
        printf( "detection time = %gms\n", t/((double)cvGetTickFrequency()*1000.) );
        for( i = 0; i < (faces ? faces->total : 0); i++ )
        {
            CvRect* r = (CvRect*)cvGetSeqElem( faces, i );
            CvPoint center;
            int radius;
            center.x = cvRound((r->x + r->width*0.5)*scale);
            center.y = cvRound((r->y + r->height*0.5)*scale);
            radius = cvRound((r->width + r->height)*0.25*scale);
            cvCircle( img, center, radius, colors[i%8], 3, 8, 0 );
        }
    }

    cvShowImage( "result", img );
    cvReleaseImage( &gray );
    cvReleaseImage( &small_img );
}

木♀木 发表于 2012-11-26 21:20:10 | 显示全部楼层
opencv不是就会给编解码么 而且是支持MPEG4的为什么还要用到xvid呢
Xflyan 发表于 2012-11-28 09:15:49 | 显示全部楼层
有机会要用到...先学习了!
x1987200567 发表于 2015-2-2 10:33:58 | 显示全部楼层
学习了,先看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-11-1 07:28 , Processed in 1.046875 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表