1. 程式人生 > >基於OpenCV的背景消除演算法[轉]

基於OpenCV的背景消除演算法[轉]

//經實驗發現,用背景減除方法也可以針對某些攝像機運動的情況,而非像大部分文章中所提到的該方法僅僅適合於攝像機靜止的情況,而且效果還要較好!實驗視訊可以是一段足球視訊!

/*
*建立多高斯背景模型
*/
void CMotionAnalysisPlatformView::OnBackgdiff()
{
    // TODO: Add your command handler code here
    IplImage* tmp_frame = 0;
    IplImage* dst = 0;

    if(!m_capture)
    {
        MessageBox("讀取視訊檔案失敗,請重新開啟真彩色(24位)視訊!", "錯誤資訊");
        return;
    }

tmp_frame = cvQueryFrame(m_capture);
dst = cvCreateImage(cvGetSize(tmp_frame), 8, 1);
dst->origin = 1;

    if(!tmp_frame)
    {
        MessageBox("讀取視訊檔案失敗,請重新開啟真彩色(24位)視訊!", "錯誤資訊");
        return;
    }
    cvNamedWindow("背景影象", 1);
    cvNamedWindow("前景影象", 1);

  //建立多高斯模型
    CvBGStatModel* bg_model = cvCreateGaussianBGModel(tmp_frame); 

    for( int fr = 1;tmp_frame; tmp_frame = cvQueryFrame(m_capture), fr++ )
{
  //printf("frame# %d : ", fr);
  //獲得背景模型更新過程所花費的時間,以 CPU時鐘/每微秒 為單位計數
  //double t = (double)cvGetTickCount();  //模型更新之前
       
    cvUpdateBGStatModel( tmp_frame, bg_model ); 
//真正的函式實現體是在: icvUpdateFGDStatModel(tmp_frame, bg_model)
       
// t = (double)cvGetTickCount() -  t;    //模型更新之後

// 以左下角為座標原點
bg_model->foreground->origin = bg_model->background->origin = 1;

//cvErode(bg_model->background, bg_model->background); 
//濾除噪聲
//cvErode(bg_model->foreground, bg_model->foreground);   
//濾除噪聲

//printf( "%.1f毫秒n", t/(cvGetTickFrequency()*1000.) );
//最後輸出結果以毫秒為單位
    cvShowImage("背景影象", bg_model->background);
    cvCopy(bg_model->foreground, dst);
    cvSmooth(dst, dst, CV_GAUSSIAN, 5);
    cvMorphologyEx( dst, dst, 0, 0, CV_MOP_CLOSE, 3);
    cvMorphologyEx( dst, dst, 0, 0, CV_MOP_OPEN, 1 );
//提取輪廓 到contour序列中
//cvFindContours 僅能處理 [單通道、顏色深度為8位的影象] 的輪廓提取
    cvFindContours( dst,
  m_storage, &m_contour, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));

    for( ; m_contour != 0; m_contour = m_contour->h_next )
    {
          CvScalar color = CV_RGB( 255, 0, 255 );
          CvScalar color_rect = CV_RGB( 0, 255, 255);           
             
  m_contour_rect = cvBoundingRect(m_contour, 1);

/*if(m_contour_rect.height + m_contour_rect.width > 100 && m_contour_rect.width * m_contour_rect.height > 20 && m_contour_rect.height/m_contour_rect.width > 1.5)
*/
if(fabs(cvContourArea(m_contour)) > 500.0)
{
cvRectangle(dst, cvPoint(m_contour_rect.x, m_contour_rect.y),          cvPoint((m_contour_rect.x + m_contour_rect.width),(m_contour_rect.y + m_contour_rect.height)),  color_rect,  2, 8,  0); 

/* replace CV_FILLED with 1 to see the outlines */ 
    cvDrawContours( dst, m_contour, color, color, -1, CV_FILLED, 8, cvPoint(0,0));
          cvShowImage("前景影象",  dst);
//  cvWaitKey(0);
          }
}       
        int k = cvWaitKey(1);    //等待一毫秒
        if( k == 'q' ) break;       
    }

    cvReleaseBGStatModel( &bg_model );
    cvReleaseCapture(&m_capture);
    cvReleaseImage(&dst);
    if(m_storage) cvClearMemStorage(m_storage);
    cvDestroyWindow("背景影象");
    cvDestroyWindow("前景影象");
    return;
}

相關推薦

基於OpenCV背景消除演算法[]

//經實驗發現,用背景減除方法也可以針對某些攝像機運動的情況,而非像大部分文章中所提到的該方法僅僅適合於攝像機靜止的情況,而且效果還要較好!實驗視訊可以是一段足球視訊!/**建立多高斯背景模型*/void CMotionAnalysisPlatformView::OnBack

基於opencv的haar演算法以人臉識別為例的訓練分類器xml的方法

第一步 採集樣本 1、 將正負樣本分別放在兩個不同的資料夾下面        分別取名pos和neg,其中pos用來存放正樣本影象,neg用來存放負樣本    注意事項:1、正樣本要統一切成24*24畫素(或者其他)的格式,建議儲存成灰度圖,節省空間           

基於OPENCV背景減除方法

基於OPENCV的背景減除方法  2009-04-27 14:59:32|  分類: openCV |  標籤: |字號大中小 訂閱 //經實驗發現,用背景減除方法也可以針對某些攝像機運動的情況,而非像大部分文章中所提到的該方法僅僅適合

基於FPGA的彩色圖灰度圖演算法

一、演算法基礎 對於彩色轉灰度,有一個很著名的心理學公式:Gray = R0.299 + G0.587 + B*0.114; 來自於RGB888 to YCbCr的演算法公式,我們可以直接把演算法移植到FPGA上,但是我們都知道FPGA無法進行浮點運算,所以我們採取將整個式子右端先都擴大

Opencv背景消除建模(BSM)

Opencv--背景消除建模(BSM)  在opencv中有兩種方法可以進行背景消除: 其一、基於機器學習(Knn--K個最近鄰)背景消除建模 其一、基於影象分割(GMM,抗干擾影象分割)背景消除建模  BS ,Background Subtraction 相關API 

基於OPENCV與DLIB的人臉替換演算法 人臉融合 Dlib opencv

基於OPENCV與DLIB的人臉替換演算法 加入了融合後的影象處理演算法 import cv2 import dlib import numpy #import sys PREDICTOR_PATH = "../face_lib/shape_predictor_68_face

基於opencv 的 YUV420 與Mat互

1. YUV420 -> Mat 可用於轉換接受到的YUV視訊源到OpenCV可以識別的資料 Mat myuv( Frame_Height + Frame_Height / 2, Frame_Width, CV_8UC1, (unsigned char *) YUV420_Image_Buf

opencv學習筆記四十:背景消除建模

在很多情況下,我們需要從一段視訊中找到感興趣的目標,比如說當人進入已經打烊的超市時發出警報。為了達到這個目的,我們首先需要“學習”背景模型,然後將背景模型和當前影象進行比較,從而得到前景目標。 背景建模(Background Subtraction)     背景與前景都是

Android Camera開發 五 基於Google自帶演算法實時檢測人臉並繪製人臉框 網路首發 附完整demo

                    本文主要介紹使用Google自帶的FaceDetectionListener進行人臉檢測,並將檢測到的人臉用矩形框繪製出來。本文程式碼基於PlayCameraV1.0.0,在Camera的open和preview流程上進行了改動。原先是放在單獨執行緒裡,這次我又把它放到

基於OpenCV影象最小二乘相位解包裹演算法

QT:5.5.1         編譯器:mcvs2012       OpenCV:2.4.9 演算法寫在Qt上一個按鈕上,相當於一個main函式,主要是變化的源影象與目標影象的深度,通道的匹配容易報錯。 void MainWindow::on_pushButton_c

基於MeanShift的Camshift演算法原理詳解(opencv實現,有原始碼)

基於MeanShift的Camshift演算法原理詳解(整理) 第一篇MeanShift原理和實現 1  MeanShift原理 如下圖所示:矩形視窗中的紅色點代表特徵資料點,矩形中的圓圈代表選取視窗。meanshift演算法的目的是找到含有最多特徵的視窗區域,即使圓心與概

基於OpenCV和C++實現最大閾值分割演算法

程式碼如下:: /********************************************************************************************************** *檔案說明: * 基於Ope

基於OpenCV的三種光流演算法實現原始碼及測試結果

本文包括基於OpenCV的三種光流演算法的實現原始碼及測試結果。具體為HS演算法,LK演算法,和ctfLK演算法,演算法的原實現作者是Eric Yuan,這裡是作者的部落格主頁:http://eric-yuan.me。本文對這三種光流演算法進行了相關除錯及結果驗證,供大家

[opencv]模板匹配演算法(單影象模板匹配和基於模板匹配的目標跟蹤)

1.模板匹配opencv函式 matchTemplate(InputArray image, InputArray temp, OutputArray result, int method) Parameters: image – Image where the search is runn

基於opencv的Niblack二值化演算法--影象分割方法

Niblack演算法是比較出名的二值化演算法,網上很多Niblack程式碼是基於Matlab的,本人覺得其速度比較慢,所以便基於OpenCV改寫了其演算法,具體參考的部落格連結已經忘記了,希望博主原諒。如果缺少某些函式,比如最大值最小值函式,可以參考本人其他部落格,裡面會提供

程式碼實現:基於opencv庫的單目標跟蹤演算法

import cv2 ############################################################################## # 載入視訊 camera = cv2.VideoCapture('tracking.avi'

基於OpenCV、隨機森林演算法實現的影象分類識別系統

開發環境jupyter notebook import cv2 import os import pickle #持久化 imp

基於單幅影象的2D3D演算法研究

最近,3D影片盛行,3D電視技術也層出不窮,3D技術在帶給大家非凡的視覺衝擊同時,也在告訴大家這背後隱藏了太多的商機。     目前的3D技術大體分為兩種:軟體技術和硬體技術。所謂硬體技術就是在拍攝影片時採用多攝像頭及各種3D相關裝置來拍攝片源;所謂軟體技術就是將2D片源通

opencv之分水嶺演算法2——基於標記點的分水嶺演算法

轉載自:http://blog.csdn.net/iracer/article/details/49225823 3.基於標記點的分水嶺演算法應用 基於標記點的分水嶺演算法應用步驟 ●  封裝分水嶺演算法類 ●  獲取標記影象             獲取前景

Canny邊緣檢測演算法基於OpenCV的Java實現)

目錄 Canny邊緣檢測演算法(基於OpenCV的Java實現) 緒論 Canny邊緣檢測演算法的發展歷史 Canny邊緣檢測演算法的處理流程 用高斯濾波器平滑影象 彩色RGB