| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 608 人关注过本帖
标题:求助!!请问各位高手,能不能用VC++将一段视频一帧一帧的截取并发送?非常 ...
只看楼主 加入收藏
XIATIAN206
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-5-14
收藏
 问题点数:0 回复次数:0 
求助!!请问各位高手,能不能用VC++将一段视频一帧一帧的截取并发送?非常感谢
我已能将一段AVI视频一帧一帧获取,但不能将其做成MFC的,即不能将其用按钮控制,请高手指点一下获取程序如下,另外如何将获取的一帧一帧的视频发送,或者转为图片格式也可
#include <stdio.h>
#include <cv.h>
#include <highgui.h>
void main(  )
{
  //声明IplImage指针
  IplImage* pFrame = NULL;
  IplImage* pFrImg = NULL;
  IplImage* pBkImg = NULL;
  CvMat* pFrameMat = NULL;
  CvMat* pFrMat = NULL;
  CvMat* pFrMat0 = NULL;
  CvMat* pBkMat = NULL;
  CvMat* pBkMat0 = NULL;

  CvCapture* pCapture = NULL;
 
  int nFrmNum = 0;
  //创建窗口
  cvNamedWindow("video", 1);
  cvNamedWindow("background",1);
 //cvNamedWindow("foreground",1);
  //使窗口有序排列
  cvMoveWindow("video", 30, 0);
  cvMoveWindow("background", 360, 0);//360
  //cvMoveWindow("foreground", 690, 0);//690
 /* if( argc != 2 )
    {
      fprintf(stderr, "Usage: bkgrd <video_file_name>\n");
      return -1;
    }
  //打开视频文件
  if( !(pCapture = cvCaptureFromFile(argv[1])))
    {
      fprintf(stderr, "Can not open video file %s\n", argv[1]);
      return -2;
    }
*/
     pCapture = cvCaptureFromAVI("vd.avi");
 
  //逐帧读取视频
      while(pFrame = cvQueryFrame( pCapture ))
    {
          nFrmNum++;
     
          //如果是第一帧,需要申请内存,并初始化
          if(nFrmNum == 1)
        {
              pBkImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U,1);
              pFrImg = cvCreateImage(cvSize(pFrame->width, pFrame->height), IPL_DEPTH_8U,1);

            pBkMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);
              pFrMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);
            pBkMat0 = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);
            pFrMat0 = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);
              pFrameMat = cvCreateMat(pFrame->height, pFrame->width, CV_32FC1);
              //转化成单通道图像再处理
              cvCvtColor(pFrame, pBkImg, CV_BGR2GRAY);
              cvCvtColor(pFrame, pFrImg, CV_BGR2GRAY);
              cvConvert(pFrImg, pFrameMat);
              cvConvert(pFrImg, pFrMat);
              cvConvert(pFrImg, pBkMat);
        }
          else
        {
              cvCvtColor(pFrame, pFrImg, CV_BGR2GRAY);
              cvConvert(pFrImg, pFrameMat);
              //先做高斯滤波,以平滑图像
              //cvSmooth(pFrameMat, pFrameMat, CV_GAUSSIAN, 3, 0, 0);
     
              //当前帧跟背景图相减
              cvAbsDiff(pFrameMat, pBkMat, pFrMat);
            cvFlip( pFrMat,pFrMat0,0);


              //二值化前景图

              cvThreshold(pFrMat0, pFrImg, 60, 255.0, CV_THRESH_BINARY);
         
              //进行形态学滤波,去掉噪音
             //cvErode(pFrImg, pFrImg, 0, 1);
              //cvDilate(pFrImg, pFrImg, 0, 1);
              //更新背景
              cvRunningAvg(pFrameMat, pBkMat, 0.003, 0);
              //将背景转化为图像格式,用以显示
            cvFlip( pBkMat,pBkMat0,0);
              cvConvert(pBkMat0, pBkImg);
              //显示图像
              cvShowImage("video", pFrame);
              cvShowImage("background", pBkImg);
              //cvShowImage("foreground", pFrImg);
              //如果有按键事件,则跳出循环
              //此等待也为cvShowImage函数提供时间完成显示
              //等待时间可以根据CPU速度调整
              if( cvWaitKey(2) >= 0 )
                break;
        }  // end of if-else
    } // end of while-loop

      //销毁窗口
      cvDestroyWindow("video");
      cvDestroyWindow("background");
      cvDestroyWindow("foreground");
      //释放图像和矩阵
    cvReleaseImage(&pFrImg);
      cvReleaseImage(&pBkImg);
      cvReleaseMat(&pFrameMat);
      cvReleaseMat(&pFrMat);
    cvReleaseMat(&pFrMat0);
      cvReleaseMat(&pBkMat);
    cvReleaseMat(&pBkMat0);
}
搜索更多相关主题的帖子: 视频 感谢 
2010-05-14 11:23
快速回复:求助!!请问各位高手,能不能用VC++将一段视频一帧一帧的截取并发送? ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028184 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved