VS+MFC+Opencv显示视频和图像。
讀入圖片:
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");
}
總結
以上是生活随笔為你收集整理的VS+MFC+Opencv显示视频和图像。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器视觉相关网站。
- 下一篇: 物体识别算法——SIFT/SURF、ha