用OpenCV進行視頻截取


  記錄用OpenCV進行視頻截取。
   核心代碼如下:

CvCapture* capture = cvCreateFileCapture(src_avi_file.c_str());
if (capture == NULL)
{
    return  - 1;
}
int fps=(int)cvGetCaptureProperty(capture,CV_CAP_PROP_FPS); //幀率
IplImage* frame;
frame = cvQueryFrame(capture);
CvVideoWriter* writer1 = cvCreateVideoWriter(dst_avi_file.c_str(),CV_FOURCC('X','V','I','D'),cvGetCaptureProperty(capture,CV_CAP_PROP_FPS),cvGetSize(frame));
int i=start_frame;
cvSetCaptureProperty(capture,CV_CAP_PROP_POS_FRAMES,i);
if (end_frame > video_info.frame_count)
{
    end_frame = video_info.frame_count ;
}
while(i<end_frame)
{
    i++;
    frame = cvQueryFrame(capture);
    if (!frame)
    {
        return 2;
    }
    cvWriteFrame(writer1,frame);
}
cvReleaseVideoWriter(&writer1);
cvReleaseCapture(&capture);

   由於是截取出來的,其中有一些變量沒有初始化,直接使用的話會報錯。

  另外,OpenCV支持的視頻格式很有限,avi是支持的,貌似標准H264也支持。

  然后遇到了個問題:IplImage在什么情況需要釋放,什么情況不需要釋放。因為我一開始以為IplImage應該要釋放,但在釋放的這里崩潰了。把釋放的這里去掉了之后也沒有出現內存泄露。有些不是很明白。要是有人看到這個問題並願意告知,那真是萬分感謝。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM