VS+MFC+Opencv显示视频和图像。

来源:互联网 发布:最小单片机 编辑:程序博客网 时间:2024/05/24 04:48

读入图片:

void CDrawImgVideoDlg::OnBnClickedShowImg()
{
    // TODO: 在此添加控件通知处理程序代码
    CDC *pDC = GetDlgItem(IDC_STATIC)->GetDC();//根据ID获得窗口指针再获取与该窗口关联的上下文指针
     HDC hdc= pDC->GetSafeHdc();                      // 获取设备上下文句柄
     CRect rect;
// 矩形类
   GetDlgItem(IDC_STATIC)->GetClientRect(&rect); //获取box1客户区
   CvvImage cimg;
   IplImage *src; // 定义IplImage指针变量src     
   src = cvLoadImage("E:\\Machine Learning\\lena.png",-1); // 将src指向当前工程文件目录下的图像me.bmp    
   cimg.CopyOf(src,src->nChannels);

   cimg.DrawToHDC(hdc,&rect);
//输出图像
   ReleaseDC( pDC );
   cimg.Destroy();
//销毁
}


显示视频:


void CDrawImgVideoDlg::OnBnClickedShowVideo()
{
  // TODO: 在此添加控件通知处理程序代码
  //IplImage *src; // 定义IplImage指针变量src     
  //  src = cvLoadImage("D:\\me.bmp",-1); // 将src指向当前工程文件目录下的图像me.bmp    
  //  cvNamedWindow("me",0);//定义一个窗口名为lena的显示窗口    
  //  cvShowImage("me",src);//在lena窗口中,显示src指针所指向的图像    
  //  cvWaitKey(0);//无限等待,即图像总显示    
  //  cvDestroyWindow("me");//销毁窗口lena    
  //  cvReleaseImage(&src);//释放IplImage指针src   

    CDC *pDC = GetDlgItem(IDC_STATIC)->GetDC();//根据ID获得窗口指针再获取与该窗口关联的上下文指针
     HDC hdc= pDC->GetSafeHdc();                      // 获取设备上下文句柄
     CRect rect;
// 矩形类
   GetDlgItem(IDC_STATIC)->GetClientRect(&rect); //获取box1客户区


     CvCapture *capture = cvCreateFileCapture ("D:\\1.avi");  //读取视频
    if(capture==NULL) {
     printf("NO capture");    //读取不成功,则标识
    //return 1;
   };    
    double fps=cvGetCaptureProperty(capture, CV_CAP_PROP_FPS );   //读取视频的帧率
 int vfps = 1000 / fps;                                        //计算每帧播放的时间
    printf("%5.1f\t%5d\n",fps,vfps);                             
 double frames=cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_COUNT);//读取视频中有多少帧
 printf("frames is %f\n",frames);
 //cvNamedWindow("example",CV_WINDOW_AUTOSIZE);                  //定义窗口
 IplImage *frame;

   CvvImage cimg;

 while(1){
    frame = cvQueryFrame( capture );                          //抓取帧
    cimg.CopyOf(frame,frame->nChannels);
    cimg.DrawToHDC(hdc,&rect);
  float ratio = cvGetCaptureProperty(capture, CV_CAP_PROP_POS_AVI_RATIO);     //读取该帧在视频中的相对位置
  printf("%f\n",ratio);
  if(!frame)break;
  //cvShowImage("IDC_STATIC",frame);                          //显示
 
  char c = cvWaitKey(vfps);
  if(c == 27 )break;
 }
  ReleaseDC( pDC );
 cvReleaseCapture(&capture);
 cvDestroyWindow("example");
}




0 0
原创粉丝点击