程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Opencv中的MeanShift圖像分割和視頻背景分離(python實現)

編輯:Python

文章目錄

    • 1.MeanShift原理
    • 2.視頻前後景分離
      • (1)MOG2去除背景

1.MeanShift原理

(1)嚴格來說該方法並不是用來對圖像進行分割的,而是在彩色層面的平滑濾波;
(2)它會中和色彩分布相近的顏色,平滑色彩細節,侵蝕掉那些面積較小的顏色區域;
(3)它以圖像上任一點P為圓心,半徑為sp,色彩幅值為sr進行不斷的迭代;

pyrMeanShiftFiltering(src, sp, sr, dst=None, maxLevel=None, termcrit=None):

Src:輸入的原始圖像;
Sp:雙精度半徑,值越大,模糊程度越大;
Sr:色彩的幅值變化范圍,變化范圍越大,連成一片區域的也就是越大。
Dst:輸出的圖像;
maxLevel:默認值為1;
Termcrit:終止標准:何時停止meanshift迭代。

import os
import cv2
import numpy as np
img=cv2.imread('images/lenna.png')
img=cv2.resize(src=img,dsize=(450,450))
#圖像分割
dst=cv2.pyrMeanShiftFiltering(src=img,sp=20,sr=30)
#圖像分割(邊緣的處理)
canny=cv2.Canny(image=dst,threshold1=30,threshold2=100)
#查找輪廓
conturs,hierarchy=cv2.findContours(image=canny,mode=cv2.RETR_EXTERNAL,method=cv2.CHAIN_APPROX_SIMPLE)
#畫出輪廓
cv2.drawContours(image=img,contours=conturs,contourIdx=-1,color=(0,255,0),thickness=3)
cv2.imshow('img',img)
cv2.imshow('dst',dst)
cv2.imshow('canny',canny)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == '__main__':
print('Pycharm')


Canny邊緣檢測算法:
https://mydreamambitious.blog.csdn.net/article/details/125116318
圖像查找findHomography:
https://mydreamambitious.blog.csdn.net/article/details/125385752


2.視頻前後景分離

(1)MOG2去除背景

在createBackgroundSubtractorMOG的基礎上進行了改進;

混合高斯模型為基礎的前景或者背景分割算法

createBackgroundSubtractorMOG2(history=None, varThreshold=None, detectShadows=None):

History:進行建模的需要多長的參考幀,默認值為200;
varThreshold:判斷背景模型是否能很好地描述像素。
detectShadows:陰影檢測;

import os
import cv2
import numpy as np
#打開攝像頭
cap=cv2.VideoCapture('video/University_Traffic.mp4')
#創建前景分離對象
bgsegment=cv2.createBackgroundSubtractorMOG2()
while cap.isOpened():
OK,frame=cap.read()
if OK==False:
break
frame=cv2.resize(src=frame,dsize=(500,500))
fgmask=bgsegment.apply(frame)
cv2.imshow('img',fgmask)
if cv2.waitKey(1)&0xFF==27:
break
cap.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
print('Pycharm')

從視頻幀中可以看到MOG2產生了很多的噪點,所以對此提出了改進的方法:
GMG去除背景的方法:
靜態背景圖估計和每個像素的貝葉斯分割抗噪性更強;


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved