如何使用Opencv调用电脑摄像头?

当我们想要使用opencv对视频图像进行处理时,往往第一步便是需要调用电脑摄像头,下面博主将提供两种版本的代码(含详细注释),帮助大家学习如何使用Opencv调用电脑摄像头进行视频录制并保存:

一、C++版本

1. 从相机中读取视频

/*从相机中读取视频*/
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
	//打开捕获器(0-系统默认摄像头)
	VideoCapture cap(0); 
	Mat frame;
	//打开失败
	if (!cap.isOpened()) {
        cerr << "Cannot open camera";
        return -1;
    }
	//打开成功
	while (true) {
		//读取视频帧
		cap.read(frame);
		//显示图像
		imshow("Pig", frame);
		//监听键盘,按任意键退出
		if (waitKey(5) >= 0)
            break;
	}
    cap.release();  //释放捕获器
	return 0;
}

2. 从文件中读取视频

/*从文件中读取视频*/
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    //视频文件所在路径
    String path = "vtest001.avi";
	//打开捕获器
	VideoCapture cap(path); 
	Mat frame;
	//打开失败
	if (!cap.isOpened()) {
        cerr << "Cannot open video";
        return -1;
    }
	//打开成功
	while (true) {
		//读取视频帧
		cap.read(frame);
		//显示图像
		imshow("Pig", frame);
		//监听键盘,按任意键退出
		if (waitKey(5) >= 0)
            break;
	}
    cap.release();  //释放捕获器
	return 0;
}

3. 保存视频

/*保存视频*/
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
	//打开捕获器(0-系统默认摄像头)
	VideoCapture cap(0);
	Mat frame;
	//创建视频写入对象并定义保存格式
    VideoWriter videoWriter("out001.avi", videoWriter.fourcc('X', 'I', 'V', 'D'),25 ,Size(100, 100));
	//打开失败
	if (!cap.isOpened()) {
        cerr << "Cannot open camera";
        return -1;
    }
	//打开成功
    while(true)
    {
		//逐帧读取
		cap.read(frame);
		//显示视频画面
		imshow("test",frame);
		//进行视频保存
        videoWriter.write(frame);
		//监听键盘,按任意键退出
		if (waitKey(5) >= 0)
            break;
    }
    cap.release();  //释放捕获器
    videoWriter.release();  //释放视频写入对象
	return 0;
}

二、Python版本

1. 从相机中读取视频

'''从相机中读取视频'''
import numpy as np  #导入科学计算库numpy
import cv2 as cv  #导入opencv-python
#打开捕获器(0-系统默认摄像头)
cap = cv.VideoCapture(0)
#打开失败
if not cap.isOpened():
    print("Cannot open camera")
    exit()
#打开成功
while True:
    #如果正确读取帧,ret为True
    ret, frame = cap.read()
    #读取失败,则退出循环
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
    #图像处理-转换为灰度图
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    #显示画面
    cv.imshow('frame', gray)
    #获取键盘按下那个键
    key_pressed = cv.waitKey(60)
    #如果按下esc键,就退出循环
    if key_pressed == 27:
        break
cap.release()  #释放捕获器
cv.destroyAllWindows() #关闭图像窗口

2. 从文件中读取视频

'''从文件中读取视频'''
import numpy as np  #导入科学计算库numpy
import cv2 as cv  #导入opencv-python
#打开捕获器('vtest.avi'-视频文件所在路径)
cap = cv.VideoCapture('vtest.avi')
#逐帧处理图像
while cap.isOpened():
    #如果正确读取帧,ret为True
    ret, frame = cap.read()
    #读取失败,则退出循环
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
    #图像处理-转换为灰度图
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    #显示画面
    cv.imshow('frame', gray)
    #获取键盘按下那个键
    key_pressed = cv.waitKey(60)
    #如果按下esc键,就退出循环
    if key_pressed == 27:
        break
cap.release()  #释放捕获器    
cv.destroyAllWindows() #关闭图像窗口

3. 保存视频

'''保存视频'''
import numpy as np  #导入科学计算库numpy
import cv2 as cv  #导入opencv-python
#打开捕获器(0-系统默认摄像头)
cap = cv.VideoCapture(0)
# 定义编解码器并创建VideoWriter对象
fourcc = cv.VideoWriter_fourcc(*'XVID')
out = cv.VideoWriter('output.avi', fourcc, 20.0, (640,  480))  #视频保存格式
while cap.isOpened():
    #如果正确读取帧,ret为True
    ret, frame = cap.read()
    #读取失败,则退出循环
    if not ret:
        print("Can't receive frame (stream end?). Exiting ...")
        break
    #图像处理-翻转图像
    frame = cv.flip(frame, 0)
    #保存图像
    out.write(frame)
    #图像显示
    cv.imshow('frame', frame)
    #获取键盘按下那个键
    key_pressed = cv.waitKey(60)
    #如果按下esc键,就退出循环
    if key_pressed == 27:
        break
cap.release()   #释放捕获器 
out.release()  #关闭视频保存
cv.destroyAllWindows()   #关闭图像窗口
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少糖加水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值