視頻前景提取 (III)【Mat版本】

電腦雜談  發布時間:2020-02-15 08:00:30  來源:網絡整理

視頻背景音樂提取_視頻前景提取_matlab 視頻前景提取

這是(II)中的Mat版本,特別注意一下accumulateWeighted這個函數的用法。

我將官網文檔中的函數表明貼起來:

accumulateWeighted

視頻前景提取_matlab 視頻前景提取_視頻背景音樂提取

Updates a running average.

C++:voidaccumulateWeighted(InputArraysrc, InputOutputArraydst, doublealpha, InputArraymask=noArray())

Python:cv2.accumulateWeighted(src, dst, alpha[, mask])→ None

視頻前景提取_matlab 視頻前景提取_視頻背景音樂提取

C:voidcvRunningAvg(const CvArr*image, CvArr*acc, doublealpha, const CvArr*mask=NULL)

Python:cv.RunningAvg(image, acc, alpha, mask=None)→ None

Parameters:

視頻前景提取_視頻背景音樂提取_matlab 視頻前景提取

The function calculates the weighted sum of the input imagesrcand the accumulatordstso thatdstbecomes a running average of a frame sequence:

\texttt{dst} (x,y)  \leftarrow (1- \texttt{alpha} )  \cdot \texttt{dst} (x,y) +  \texttt{alpha} \cdot \texttt{src} (x,y)  \quad \text{if} \quad \texttt{mask} (x,y)  \ne 0

That is,alpharegulates the update speed (how fast the accumulator “forgets” about earlier images). The function supports multi-channel images. Each channel is processed independently.

視頻前景提取_視頻背景音樂提取_matlab 視頻前景提取

See also

,,

代碼:

//opencv2.0風格的視頻前景提取
#include "cv.h"
#include "highgui.h"
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>
#include <iostream>
#include <cstdio>
using namespace std;
using namespace cv;
int main()
{
	Mat frame, frame_copy,img1,output,gray,frame_copy_8U;
	double learningRate = 0.01;	// 控制背景累積學習的速率
	char* input_name = "001.avi";
	//從視頻讀入
	VideoCapture capture(input_name);
	cvNamedWindow( "result", 1 );
	if(capture.isOpened()/*capture*/)	// 讀取文件開關
	{
		//對每一幀做處理
		for(;;)
		{
			//frame = cvQueryFrame( capture );	// 讀取文件開關
			capture >> frame;
			if(!frame.empty())
			{ 
				cvtColor(frame, gray, CV_BGR2GRAY);
				//進行處理
				if (frame_copy.empty())
				{
					//記錄第一幀
					gray.convertTo(frame_copy, CV_32F);
				}
				frame_copy.convertTo(frame_copy_8U, CV_8U);
				//做差分
				absdiff(frame_copy_8U, gray, img1);
				// 對得到的前景進行閾值選取,去掉偽前景
				threshold(img1, output, 30, 255, THRESH_BINARY_INV);
				accumulateWeighted(gray, frame_copy,0.01,output);
				imshow("src", frame);
				imshow("result", output);
			}
			else
			{ 
				printf(" --(!) No captured frame -- Break!");
				break;
			}
			//10ms中按任意鍵進入此if塊
			if( cvWaitKey( 10 ) >= 0 )
				break;
		}
	}
	return 0;
}

更好版本(II):

//opencv2.0風格的視頻前景提取
#include "cv.h"
#include "highgui.h"
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>
#include <iostream>
#include <cstdio>
using namespace std;
using namespace cv;
int main()
{
	Mat frame, frame_copy,img1,output,gray,frame_copy_8U;
	double learningRate;	// 控制背景累積學習的速率
	int nThreshold; //二值化閾值
	char* input_name = "001.avi";
	//從視頻讀入
	VideoCapture capture(input_name);
	cvNamedWindow( "result", 1 );
	if(capture.isOpened()/*capture*/)	// 讀取文件開關
	{
		//對每一幀做處理
		for(;;)
		{
			//frame = cvQueryFrame( capture );	// 讀取文件開關
			capture >> frame;
			if(!frame.empty())
			{ 
				cvtColor(frame, gray, CV_BGR2GRAY);
				//進行處理
				if (frame_copy.empty())
				{
					//記錄第一幀
					gray.convertTo(frame_copy, CV_32F);
				}
				frame_copy.convertTo(frame_copy_8U, CV_8U);
				//做差分
				absdiff(frame_copy_8U, gray, img1);
				// 對得到的前景進行閾值選取,去掉偽前景
				nThreshold=30;
				threshold(img1, output, nThreshold, 255, THRESH_BINARY_INV);
				learningRate = 0.01;
				accumulateWeighted(gray, frame_copy,learningRate,output);
				imshow("src", frame);
				imshow("result", output);
			}
			else
			{ 
				printf(" --(!) No captured frame -- Break!");
				break;
			}
			//10ms中按任意鍵進入此if塊
			if( cvWaitKey( 10 ) >= 0 )
				break;
		}
	}
	return 0;
}

版權聲明:本文內容由互聯網用戶自發貢獻,版權歸作者所有,本社區不擁有所有權,也不承擔相關法律責任。如果您看到本社區中有涉嫌剽竊的內容,歡迎發送郵件到:[email protected]進行舉報,并提供相關證據視頻前景提取,一經查實視頻前景提取,本社區將立即刪除涉嫌侵權內容。


本文來自電腦雜談,轉載請注明本文網址:
http://www.772070.live/a/bofangqi/article-140828-1.html

    相關閱讀
    發表評論  請自覺遵守互聯網相關的政策法規,嚴禁發布、暴力、反動的言論

    熱點圖片
    拼命載入中...
    天津快乐十分20选8技巧 安徽乐乐麻将app下载 永久公式规律六肖下期 股票交易日查询 单机麻将不联网免费 英超2020 山西麻将扣点点规则 虎扑足球 天津麻将手机版哪个好 捕鱼王ll老板好 手机qq麻将