当前位置:   article > 正文

Opencv中的MeanShift图像分割和视频背景分离(python实现)_opencv python meanshift

opencv python meanshift

1.MeanShift原理

(1)严格来说该方法并不是用来对图像进行分割的,而是在彩色层面的平滑滤波;
(2)它会中和色彩分布相近的颜色,平滑色彩细节,侵蚀掉那些面积较小的颜色区域;
(3)它以图像上任一点P为圆心,半径为sp,色彩幅值为sr进行不断的迭代;

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

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')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

在这里插入图片描述
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):
  • 1

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')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

在这里插入图片描述

从视频帧中可以看到MOG2产生了很多的噪点,所以对此提出了改进的方法:
GMG去除背景的方法:
静态背景图估计和每个像素的贝叶斯分割抗噪性更强;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/285061
推荐阅读
相关标签
  

闽ICP备14008679号