OpenCV2:幼兒園篇 第八章 視頻操做

一.簡介

OpenCV提供了專門操做視頻的接口類VideoCaptureios

 

二.構造VideoCapture類

VideoCapture::VideoCapture()ide

VideoCapture::VideoCapture(const string& filename)函數

VideoCapture::VideoCapture(int device)spa

  • filename

輸入視頻文件的路徑名稱視頻

  • device

打開視頻操做索引號設置:blog

攝像頭設置爲0索引

 

三.VideoCapture類成員函數

VideoCapture::grab  抓住下一幀的視頻文件或捕獲設備接口

VideoCapture::retrieve  解碼並返回視頻幀資源


VideoCapture& VideoCapture::operator >> (Mat& image)get

 

1.打開關閉視頻

VideoCapture::open         打開視頻文件或視頻獲取裝置

VideoCapture::isOpened  判斷視頻文件讀取是否正確,返回true則正確

VideoCapture::release  關閉視頻流文件

 

 

2.視頻信息

videoCapture::get   返回指定視頻類的相關參數信息

VideoCapture::set  設置類信息的一個屬性

 

3.讀取序列幀

bool VideoCapture::read(Mat& image)  //解碼返回下一個視頻幀

 

 

4.提取序列幀

VideoWriter

 

#include <iostream>
#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

int main(int argc, char* argv[])
{

	// 打開第一個攝像頭
	// VideoCapture cap(0);

	// 打開視頻文件
	VideoCapture cap("k1.avi");

	// 檢查是否成功打開
	if (!cap.isOpened())
	{
		cerr << "Can not open a camera or file" << endl;
		return -1;
	}

	Mat edges;
	// 建立窗口
	namedWindow("edges", 1);

	for(;;)
	{
		Mat frame;

		// 從cap中讀一幀,存到frame
		cap >> frame;

		// 若是未讀到圖像
		if (frame.empty())
			break;

		// 將讀到的圖像轉爲灰度圖
		cvtColor(frame, edges, CV_BGR2GRAY);

		// 進行邊緣提取操做
		Canny(edges, edges, 0, 30, 3);

		// 顯示結果
		imshow("edges", frame);

		// 等待30秒,若是按鍵則退出循環
		if (waitKey(30) >= 0)
			break;
	}

	// 退出時會自動釋放cap中佔用資源
	return 0;
}

 

 

四.視頻圖像比較

圖像類似度主要是對兩幅圖像內容的類似程度進行打分,根據分數的高低來判斷圖像內容的類似程度.

圖像比較有兩種方法:峯值信噪比(PSNR,Peak Signal to Noise Ratio)和結構類似性(SSIM,tructural similarity index)

相關文章
相關標籤/搜索