关于OpenCV调用摄像头及视频和图片的保存

Posted 小胆胆20

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于OpenCV调用摄像头及视频和图片的保存相关的知识,希望对你有一定的参考价值。

打开VS创建好新项目

输入以下代码

#include<opencv2\\opencv.hpp>
#include<iostream>
#include<string>
using namespace cv;
using namespace std;

string writePath = "D:/WJ/";   //视频和图片的保存地址

int main(int argc, char** argv)
    VideoCapture cap(0);   //0代表电脑默认摄像头
    VideoWriter writer("D:/WJ/test.avi", cv::VideoWriter::fourcc('M', 'J', 'P', 'G'), 25.0, Size(640, 480));
    string name;
    int i = 0;
    while (1)
        Mat frame, gray;
        cap >> frame;

        if (32 == waitKey(20))    //空格拍照
            name = writePath + to_string(i) + ".jpg";
            imwrite(name, frame);
            cout << name << endl;
            i++;
        

        cap >> frame;
        writer << frame;
        imshow("Hello", frame);
        if (97 == waitKey(10))             //'Esc'退出
            break;
        

    
    return 0;

运行结果如下

点击相应按键进行拍摄和保存 

一、关于waitkey()的详细解释

1. waitKey()–是在一个给定的时间内(单位ms)等待用户按键触发; 

如果用户没有按下键,则继续等待 (循环)

常见 : 设置 waitKey(0) , 则表示程序会无限制的等待用户的按键事件

一般在 imgshow 的时候 , 如果设置 waitKey(0) , 代表按任意键继续

2. 显示视频时,延迟时间需要设置为 大于0的参数

delay > 0时 , 延迟 ”delay”ms , 在显示视频时这个函数是有用的 , 

用于设置在显示完一帧图像后程序等待 ”delay”ms 再显示下一帧视频 ; 

如果使用 waitKey(0) 则只会显示第一帧视频
 

二、视频的编解码方式有:

cv2.VideoWriter_fourcc('M', 'P', '4', '2') MPEG-4.2编码 .mp4 可指定结果视频的大小


cv2.VideoWriter_fourcc('X','2','6','4') MPEG-4编码 .mp4 可指定结果视频的大小


cv2.VideoWriter_fourcc('I', '4', '2', '0')该参数是YUV编码类型,文件名后缀为.avi 广泛兼容,但会产生大文件


cv2.VideoWriter_fourcc('P', 'I', 'M', 'I')该参数是MPEG-1编码类型,文件名后缀为.avi


cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')该参数是MPEG-4编码类型,文件名后缀为.avi,可指定结果视频的大小


cv2.VideoWriter_fourcc('T', 'H', 'E', 'O')该参数是Ogg Vorbis,文件名后缀为.ogv


cv2.VideoWriter_fourcc('F', 'L', 'V', '1')该参数是Flash视频,文件名后缀为.flv
 

使用opencv去操作树莓派摄像头保存图片和视频

利用树莓派的摄像头去学习opencv的基本操作 —— 保存图片和视频

1、使用Opencv去控制树莓派的摄像头拍照并保存到本地,主要使用cv2和numpy库

#!/usr/bin/python3
# -*- coding:utf-8 -*-


import cv2
import numpy

#初始化摄像头
camera = cv2.VideoCapture(0)

#读取图像
ret,img = camera.read()
#转换为灰度图像
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#保存图像
cv2.imwrite(‘img.jpg‘,img)
cv2.imwrite(‘gray.jpg‘,gray)

#释放摄像头
camera.release()
cv2.destroyAllWindwos()

  

2、记录一段视频到本地

#!/usr/bin/python3
# -*- coding:utf-8 -*-

#保存一段视频到本地

import cv2
import numpy

#初始化摄像头
camera = cv2.VideoCapture(0)

# 设置编码格式
fourcc = cv2.VideoWriter_fourcc(*‘XVID‘) # mpeg4编码
#设置帧频
fps =24
#设置分辨率
framesize = (640,480)
#设置摄像头输出
out = cv2.VideoWriter(‘output.avi‘,fourcc,fps,framesize)

while True:
        ret , frame = camera.read()
        gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
        #写数据到本地
        out.write(frame)
        if cv2.waitKey(1) & 0xff == ord(‘q‘) : # 按下q退出循环
            break
#释放资源
camera.release()
out.release()
cv2.destroyAllWindows()

  

 

以上是关于关于OpenCV调用摄像头及视频和图片的保存的主要内容,如果未能解决你的问题,请参考以下文章

opencv-python——2(颜色分割(RGBHSV)读取摄像头和视频并保存)

OpenCV做图片人脸识别和视频人物识别

javacpp-opencv图像处理系列:国内车辆牌照检测识别系统(万份测试车牌识别准确率99.7%以上,单次平均耗时39ms)

OpenCV:01图片&视频的加载显示

使用Python+Opencv从摄像头逐帧读取图片保存在本地

OpenCV|图片与视频的相互转换(C++&Python)