Noções básicas de manipulação de vídeo OpenCV

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

Acho que você gosta

Origin blog.csdn.net/qq_46248455/article/details/121196138
Recomendado
Clasificación