博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
My second day of OpenCV
阅读量:4935 次
发布时间:2019-06-11

本文共 2548 字,大约阅读时间需要 8 分钟。

    OpenCV的第二天,两个简单的视频处理程序,依旧伴着那Learning OpenCV一书和各种百度。

1.播放avi格式视频

#include "highgui.h"

#include "cv.h"

void main() {

cvNamedWindow( "Example2", 0 );
CvCapture* capture = cvCreateFileCapture( "火山.avi" );
IplImage* frame;
while(1) {
frame = cvQueryFrame( capture );
if( !frame ) break;
cvShowImage( "Example2", frame );
char c = cvWaitKey(33);
if( c == 27 ) break;
}
cvReleaseCapture( &capture );
cvDestroyWindow( "Example2" );
}//display a video

2.为视频播放窗口添加时间轴(以帧为单位)

#include "highgui.h"

#include "cv.h"

int g_slider_position = 0;//g_表示全局变量

CvCapture* g_capture = NULL;
void onTrackbarSlide(int pos)//用户拨动时间轴时使用的回调程序
{
   cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,pos);

   //CV_CAP_PROP_POS_FRAMES, which indicates that we would like to set the read position

   //in units of frames. (We can use AVI_RATIO instead of FRAMES if we want to set the position
   //as a fraction of the overall video length)
}
int main()
{
    cvNamedWindow( "Example3", CV_WINDOW_AUTOSIZE );
    g_capture = cvCreateFileCapture( "火山.avi" );
    int frames = (int) cvGetCaptureProperty(g_capture,CV_CAP_PROP_FRAME_COUNT);
       if( frames!= 0 ) {
        cvCreateTrackbar("Position","Example3",&g_slider_position,frames,onTrackbarSlide);
    }
// While loop (as in Example 2) capture & show video
IplImage* frame;
 while(1)
                   {
                            frame=cvQueryFrame(g_capture);//从g_capture 获取一帧图像
                            if( !frame ) break;
          g_slider_position++;//
       cvShowImage( "Example3", frame );
       char c = cvWaitKey(33);
                            if(c==27)//27是Esc按键的ASCII值
                     break;//按下ESc键,停止播放  
                   }
cvReleaseCapture( &g_capture );
cvDestroyWindow( "Example3" );
// Release memory and destroy window

return(0);

}

 

以上两个程序需要指出的是:

(1)AVI格式的视频并非皆可播放。(有时会一闪)

    ---解决:下载解码器(博主亲测下载Xvid对某一avi文件无用,尚未弄清原因)

根据网络搜索的资料:

以AVI格式结尾的视频文件有好几种,不同种类对应的压缩方式是不一样的。这也就意味着,以AVI格式结尾的文件,随着压缩方式的不同,需要的解码器也是不同的。

① 非压缩格式的AVI文件(或者MPEG-1格式的文件),这个就不需要任何的插件就可以直接播放了。

② DIVX格式的AVI文件,安装最新版本的DIVX解码器就可以播放了。不过,正式版本的DIVX是要收费的,如果你用的是非正式版的,或者试用版的,估计可能会出现一些问题。

③ XVID格式的AVI文件,这是MPEG-4格式的一种,可以说是从DIVX变异而来的。XVID是一个免费的视频编解码器,你可以放心大胆的使用。

④ ffdshow MPEG-4格式的AVI文件,现在越来越多的AVI都采用ffdshow MPEG4来进行压缩编码,它集成了XVID和DIVX两者的优点。所以,如果你安装了ffdshow,那么就不用担心DIVX,XVID编码的解码了。另外,ffdshow还提供了丰富的滤镜功能,如增加亮度,增加锐度等。

⑤ WMV9格式的AVI文件,微软自己推出的MPEG4编码标准。使用Media Player 9.0就可以播放。

⑥ VP6格式的AVI文件,也是一种MPEG4的编码格式,On2 Technologies开发的编码器,VP6号称在同等码率下,视频质量超过了Media Player 9.0和H.264。VP6视频编码器目前被中国的EVD所采用,不过,除此之外,这种格式的编码的应用并不多见。

⑦ 其它格式的AVI文件。

正如前面所说,AVI只是一个外壳框架,并没有规定内部的解码必须采用什么标准。这就造成了同样是.avi结尾,但有的播放器能播放,有的却不能的现象经常发生。

(2)Learning OpenCV一书叫人无法偷懒

此书所有的代码都需要读者细心修改,才能编译连接通过。这令人头疼,但无疑使人进步,逼人思考。

转载于:https://www.cnblogs.com/my-idiot-days/archive/2013/01/26/2878358.html

你可能感兴趣的文章