Opencv背景分割器

Opencv背景分割器

转载请注明出处:https://blog.csdn.net/qq_41007606/article/details/82053828

Opencv提供了一个称为BackgroundSubtractor的类,在分割前景和背景时很方便。下面我们直接上代码,看一下它的使用方式。
这里提供Python和C++两种版本的code。
Python实现
1、导入包

import numpy as np
impport cv2

2、打开视频或摄像头

cap = cv2.Videocapture()

3、创建背景分割器,这里支持KNN,MOG2,GMG三种,根据自己的需要选择

mog = cv2.createBackgroundSubtractorMOG2()

4、传入图像并检测

while1(1)
    frame = cap.read()[1]
    mask = mog.apply(frame)

    cv2.imshow('frame',mask)
    cv2.waitKey(30)
cap.release()
cv2.destoryAllWindows()

c++实现
1、引入opencv头文件
2、打开摄像设备或视频

VideoCapture capture();

3、创建背景分割器

pBackgroundKnn = createBackgroundSubtractorMOG2();

4、传入图像并检测

Mat frame;
Mat mask;

capture>>frame;
pBackgroundKnn->apply(frame, mask);
imshow("frame",mask);
waitKey(30);
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在Python中使用OpenCV进行背景分离的方法有多种。其中一种常用的方法是使用createBackgroundSubtractorMOG2函数创建背景分离器对象。可以通过调整函数的参数来控制背景模型的建模参考帧数、判断背景模型描述像素的阈值以及是否进行阴影检测。以下是一个使用createBackgroundSubtractorMOG2函数进行背景分离的示例代码: ```python import cv2 # 打开摄像头 cap = cv2.VideoCapture(0) # 创建背景分离器对象 bgsegment = cv2.createBackgroundSubtractorMOG2() while cap.isOpened(): ret, frame = cap.read() if not ret: break # 对帧进行调整大小 frame = cv2.resize(frame, (500, 500)) # 应用背景分离器获取前景掩码 fgmask = bgsegment.apply(frame) cv2.imshow('img', fgmask) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() ``` 另外,还可以使用pyrMeanShiftFiltering函数进行图像分割,该函数可以根据像素的颜色和空间信息将图像分割成不同的区域。以下是一个使用pyrMeanShiftFiltering函数进行图像分割的示例代码: ```python import cv2 # 读取图像 img = cv2.imread('images/lenna.png') img = cv2.resize(img, (450, 450)) # 图像分割 dst = cv2.pyrMeanShiftFiltering(src=img, sp=20, sr=30) # 边缘检测 canny = cv2.Canny(image=dst, threshold1=30, threshold2=100) # 查找轮廓 contours, hierarchy = cv2.findContours(image=canny, mode=cv2.RETR_EXTERNAL, method=cv2.CHAIN_APPROX_SIMPLE) # 画出轮廓 cv2.drawContours(image=img, contours=contours, 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() ``` 希望对你有帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nice七仔爱地球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值