用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应该要释放,但在释放的这里崩溃了。把释放的这里去掉了之后也没有出现内存泄露。有些不是很明白。要是有人看到这个问题并愿意告知,那真是万分感谢。

转载于:https://www.cnblogs.com/betterwgo/p/6561447.html

OpenCV是一个开源的计算机视觉和机器学习软件库,它提供了很多常用功能,包括视频处理。在OpenCV截取视频中的图像可以通过以下步骤实现: 1. 初始化视频捕获对象:使用`cv2.VideoCapture()`函数创建一个视频捕获对象,它可以通过传入视频文件的路径或设备ID来打开视频文件或视频流。 2. 循环读取帧:使用`read()`方法从视频捕获对象中循环读取每一帧图像。这个方法会返回两个值,第一个是读取到的帧,第二个是一个布尔值表示是否成功读取到帧。 3. 显示图像:使用`cv2.imshow()`函数来显示读取到的帧。 4. 截取图像:当需要截取某帧图像时,可以将帧数据保存到文件中。这可以通过`cv2.imwrite()`函数实现,它接受两个参数:文件名和要保存的图像。 5. 释放资源:使用`release()`方法释放视频捕获对象,并使用`cv2.destroyAllWindows()`关闭所有OpenCV创建的窗口。 下面是一个简单的Python示例代码,展示了如何使用OpenCV截取视频中的一帧图像并保存: ```python import cv2 # 初始化视频捕获对象 cap = cv2.VideoCapture('video.mp4') # 循环读取帧 while True: ret, frame = cap.read() if not ret: break # 显示图像 cv2.imshow('Frame', frame) # 检测按键事件,例如按下 's' 键截取图像并保存 if cv2.waitKey(1) & 0xFF == ord('s'): cv2.imwrite('screenshot.jpg', frame) break # 释放资源 cap.release() cv2.destroyAllWindows() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值