1. Leia e reproduza o vídeo
#include<opencv2\opencv.hpp>
using namespace cv; //包含cv命名空间
/*int main()
{
VideoCapture capture("5.avi");//1.读入视频
while (1)//2.循环显示每一帧
{
Mat frame;//定义一个Mat变量,用于存储每一帧的图像
capture >> frame;//读取当前帧
若视频播放完成,退出循环
if (frame.empty())
{
break;
}
imshow("读取视频", frame);//显示当前帧
waitKey(30);//延时30毫秒
}
return 0;
}
2. Chame a câmera para coletar imagens
(1) Capturar imagens
#include<opencv2\opencv.hpp>
using namespace cv; //包含cv命名空间
int main()
{
VideoCapture capture(0);//1.从摄像头读入视频
Mat edges;
while (1)//2.循环显示每一帧
{
Mat frame;//定义一个Mat变量,用于储存每一帧的图像
capture >> frame;//读取当前帧
imshow("读取视频", frame);//显示当前帧
waitKey(30);//延时30ms
}
return 0;
}
(2) Aumente o efeito da detecção de borda
int main()
{
VideoCapture capture(0);//1.从摄像头读入视频
Mat edges;
while (1)//2.循环显示每一帧
{
Mat frame;//定义一个Mat变量,用于储存每一帧的图像
capture >> frame;//读取当前帧
cvtColor(frame,edges, COLOR_BGR2GRAY);//原图转换为灰度图像
blur(edges, edges, Size(7, 7));
Canny(edges, edges, 0, 30, 3);
imshow("读取视频", frame);//显示当前帧
imshow("被Canny后的视频", edges);//显示经过处理后的当前帧
if( waitKey(30)>=0) break;//延时30ms
}
return 0;
}
Nota: Chamada de câmera:
só precisa alterar o arquivo de vídeo para o ID da câmera (0)
3. Salve o vídeo
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv; //包含cv命名空间
using namespace std;
int main()
{
Mat img;
VideoCapture video(0);
//读取视频
//VideoCapture video;
//video.open("5.avi");
if (!video.isOpened())//判断是否调用成功
{
cout << "打开摄像头失败,请确认摄像头是否安装成功";
return -1;
}
video >> img;//获取图像
//检测是否成功获取图像
if (img.empty())
{
cout << "没有获得图像" << endl;
return -1;
}
bool isColor = (img.type() == CV_8UC3);//判断相机(视频)是否为彩色
VideoWriter writer;
int codec = VideoWriter::fourcc('M', 'j', 'p', 'G');//选择编码格式
//OpenCV 4.0版本设置编码格式
//int codec =CV_FOURCC('M', 'j', 'p', 'G');
double fps = 25.0;//设置视频文件名称
writer.open("C:/Users/86182/Desktop/list/test video.mp4", codec, fps, img.size(), isColor); //创建保存文件的视频流
if (!writer.isOpened())
{
cout << "打开视频文件失效,请确认是否合法输入" << endl;
return -1;
}
while (1)
{
//检测是否执行完毕
if (!video.read(img))
{
cout << "摄像头断开连接或者视频读取完成" << endl;
break;
}
writer.write(img);//把图像写入视频流
//writer<<img;
imshow("Live", img);
char c = waitKey(50);
if (c == 27)//按“ESC”键退出视频保存
{
break;
}
}
//退出程序时自动关闭视频流
//video.release();
//writer.release();
return 0;
}
Entre eles, VideoCapture, imwriter e VideoWriter() são usados da seguinte forma:
VideoCapture(const string& filename,int apiPreference=CAP_ANY)
- filename: leia o arquivo de vídeo ou o nome da sequência de imagens
- apiPreference: propriedades definidas ao ler dados, como formato de codificação, se deve chamar OpenNI, etc.
imwriter(const String& filename,InputArray img,Const std::vector& params=std::vector() )
- filename: o endereço e o nome do arquivo para salvar a imagem, incluindo o formato da imagem
- img: a variável da matriz da classe Mat a ser salva
- params: Salvar sinalizador de configuração de atributo de formato de imagem
VideoWriter(const String& filename,int fourcc,double fps,Size framSize,bool isColor=true)
- filename: o endereço e o nome do arquivo do vídeo salvo, incluindo o formato do vídeo
- fourcc: Código de codec de caractere de quadro compactado
- fps: Salve a taxa de quadros do vídeo, ou seja, o número de imagens por segundo no vídeo
- framSize: o tamanho do quadro de vídeo
- isColor: se o vídeo salvo é um vídeo colorido