标签: background-subtraction

OpenCv Blob/Contour标签

嗨,我一直在研究这个问题,但却没有很好的解决方案.

我正逐帧阅读视频,并使用背景减法来识别有移动的区域,并使用cvFindContours()来获取移动对象的矩形边界.

假设程序保持简单,那么只有2个人.

这些物体以它们可以重叠的方式移动,以一定的间隔转弯并移开.

我怎样才能正确标记这个人类x 2.

cvFindContour可以以随机方式返回边界.对于Frame1,Frame2,Frame3 ...... FrameN

我最初可以比较矩形边界质心来正确地标记人类.一旦人类重叠并离开,这种方法就会失败.

我试图跟踪原始obj的像素颜色(但是人类非常相似,某些区域有类似的颜色,如手,腿,头发)因此不够好.

我正在考虑使用Image Statistic:

CountNonZero(),SumPixels()Mean()Mean_StdDev()MinMaxLoc()Norm()

唯一地区分这两个对象.我相信这将是一个更好的方法.

opencv blob contour background-subtraction

4
推荐指数
1
解决办法
1万
查看次数

是否可以使用在opencv中实现的ViBe算法,用于没有GPU的系统?

我想测试ViBe算法的背景减法.目前我正在使用opencv库.我在opencv/samples/gpu/bgfg_segm.cpp和bgfg_vibe.cpp文件中找到了一个示例实现.这些文件在gpu模块下.现在我有一个没有GPU的系统.当我尝试运行代码时,它会在第一帧的初始化时崩溃.谁能告诉我如何解决这个问题?

提前致谢.

opencv motion-detection blobs background-subtraction

4
推荐指数
1
解决办法
5020
查看次数

BackgroundSubtractorMOG2和OpenCV

我正在尝试编译http://mateuszstankiewicz.eu/?p=189上的简单示例 我正在运行Ubuntu 12.10 64位.我使用的是OpenCV 2.4.4a

我使用makefile编译,执行此操作:

g++ background_subtraction.cpp -o background_subtraction -I/usr/local/include/opencv -I/usr/local/include/opencv2 -L /usr/local/lib -lm -lopencv_core -lopencv_highgui -lopencv_imgproc -lcvblob
Run Code Online (Sandbox Code Playgroud)

错误:

/tmp/cc0ZWnll.o: dans la fonction « main »:
background_subtraction.cpp:(.text+0x96): référence indéfinie vers « cv::BackgroundSubtractorMOG2::BackgroundSubtractorMOG2() »
background_subtraction.cpp:(.text+0x1f0): référence indéfinie vers « cv::BackgroundSubtractorMOG2::operator()(cv::_InputArray const&, cv::_OutputArray const&, double) »
background_subtraction.cpp:(.text+0x222): référence indéfinie vers « cv::BackgroundSubtractorMOG2::getBackgroundImage(cv::_OutputArray const&) const »
background_subtraction.cpp:(.text+0x61a): référence indéfinie vers « cv::BackgroundSubtractorMOG2::~BackgroundSubtractorMOG2() »
background_subtraction.cpp:(.text+0x7a6): référence indéfinie vers « cv::BackgroundSubtractorMOG2::~BackgroundSubtractorMOG2() »
collect2: erreur: ld a retourné 1 code d'état d'exécution
Run Code Online (Sandbox Code Playgroud)

意思是:未定义引用... …

opencv background-subtraction

4
推荐指数
1
解决办法
1万
查看次数

OpenCV C++:如何减慢BackgroundSubtractorMOG的背景调整?

我在OpenCV中使用BackgroundSubtractorMOG来跟踪对象.当它们出现时,它工作正常,但背景快速适应,所以我无法跟踪静态对象.如何使背景调整变慢(我不希望它完全静态,只是更慢)?

使用构造函数设置学习速率不会改变:

BackgroundSubtractorMOG pBSMOG = BackgroundSubtractorMOG(???);
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?谢谢!

c++ opencv background-subtraction

4
推荐指数
1
解决办法
5312
查看次数

如何在openCV2 python中保存视频的掩码

我可以从网络摄像头捕获视频并使用此代码保存

cap = cv2.VideoCapture(0)
fgbg= cv2.BackgroundSubtractorMOG()

fourcc = cv2.cv.CV_FOURCC(*'DIVX')
out    = cv2.VideoWriter('output.avi', fourcc, 20.0, (640,480))

while(cap.isOpened()):
    ret,frame = cap.read()
    if ret:
        fgmask = fgbg.apply(frame)
        out.write(frame)          #Save it                                      
        cv2.imshow('Background Subtraction', fgmask)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break                 #q to quit                                    
    else:
        break                     #EOF                                          

cap.release()
out.release()
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

这按照人们的预期记录,并显示背景减法的内容.它将它保存到output.avi.一切都很好.但我无法保存前景蒙版,它给了我一个Could not demultiplex stream错误.(此行在上面的代码中更改).

out.write(fgmask)          #Save it    
Run Code Online (Sandbox Code Playgroud)

为什么是这样?当我从捕获中读取时,fgmask不是一个框架吗?

python opencv background-subtraction

4
推荐指数
1
解决办法
1649
查看次数

如何使用openCV检测实时摄像机中的运动物体

我正在使用openCV为我的ios应用程序检测实时摄像机中的移动物体,但我不熟悉openCV的使用请帮助我.任何其他方式也欢迎.

- (void)viewDidLoad {
    [super viewDidLoad];

    self.videoCamera.delegate = self;
    self.videoCamera = [[CvVideoCamera alloc] initWithParentView:self.view];

    self.videoCamera.defaultAVCaptureDevicePosition = AVCaptureDevicePositionBack;
    self.videoCamera.defaultAVCaptureSessionPreset = AVCaptureSessionPreset352x288;
    self.videoCamera.defaultAVCaptureVideoOrientation = AVCaptureVideoOrientationPortrait;
    self.videoCamera.defaultFPS = 30;
    self.videoCamera.grayscaleMode = NO;
    [self.videoCamera start];
//    cv::BackgroundSubtractorMOG2 bg;

}
- (void)processImage:(cv::Mat&)image
{
    //process here
    cv::cvtColor(image, img, cv::COLOR_BGRA2RGB);
    int fixedWidth = 270;
    cv::resize(img, img, cv::Size(fixedWidth,(int)((fixedWidth*1.0f)*   (image.rows/(image.cols*1.0f)))),cv::INTER_NEAREST);

    //update the model
   bg_model->operator()(img, fgmask, update_bg_model ? -1 : 0);


    GaussianBlur(fgmask, fgmask, cv::Size(7, 7), 2.5, 2.5);
    threshold(fgmask, fgmask, 10, 255, cv::THRESH_BINARY);

    image = cv::Scalar::all(0);
    img.copyTo(image, fgmask);
}
Run Code Online (Sandbox Code Playgroud)

我是openCV的新手,所以我不知道该怎么办.

iphone opencv ios background-subtraction

3
推荐指数
1
解决办法
3650
查看次数

在opencv java中实现背景减法,以便从网络摄像头输入视频?

我想在静态背景中提取单独移动人的前景蒙版.如何在open-CV java中实现这个?

package com.java.opencv;

import org.opencv.core.Mat;
import org.opencv.video.BackgroundSubtractor;
import org.opencv.video.BackgroundSubtractorMOG2;
import org.opencv.videoio.VideoCapture;

public class HelloCV {
    public static void main(String[] args){
        VideoCapture capture = new VideoCapture(0);
          Mat camImage = new Mat();
          BackgroundSubtractorMOG2 backgroundSubtractorMOG=new BackgroundSubtractorMOG2();
            if (capture.isOpened()) {
                while (true) {
                    capture.read(camImage);


                    Mat fgMask=new Mat();
                    backgroundSubtractorMOG.apply(camImage, fgMask,0.1);

                    Mat output=new Mat();
                    camImage.copyTo(output,fgMask);

                    //displayImageOnScreen(output);
                   }
                }
    }
}
Run Code Online (Sandbox Code Playgroud)

我在这一行得到一个错误.

BackgroundSubtractorMOG2 backgroundSubtractorMOG=new BackgroundSubtractorMOG2();
Run Code Online (Sandbox Code Playgroud)

构造函数BackgroundSubtractorMOG2()未定义

找不到这些方法的适当文档

java webcam opencv background-subtraction

2
推荐指数
1
解决办法
4059
查看次数

背景减法OpenCV中这两个参数的区别是什么

我使用OpenCV进行前景检测,但我有一个问题,如果有人可以提供帮助.问题在于以下两个参数:

  • 了解费率:bst.apply(currentFame, foregroungMask, learnRate); // -1 for auto, and the range is 0~1
  • bst.setBackgroundRatio(double ratio) // default is 0.8xxx

问题是这两个参数是否相同,如果答案是NO那么第二个参数可以做什么?

当我看到课堂setBackgroundRatio(double ratio)上没有这种方法时,问题就出现了BackgroundSubtractorKNN,但它只是在BackgroundSubtractorMOG2课堂上.但它们都有方法中的学习率参数apply().

注意:我在Java中使用OpenCV

opencv background-subtraction

2
推荐指数
1
解决办法
897
查看次数

将叶子与背景分开

我有一组图像,所有这些图像看起来几乎都像这里的这片叶子:

低分辨率图像...

我想从背景中提取叶子,为此我使用了此处GrabCut使用的算法。

作为一种不同的方法,我还使用基于 r、g 和 b 值比率的阈值,如下所示:

import numpy as np
import cv2
import matplotlib.pyplot as plt

testImg = cv2.imread('path_to_the_image')
testImg = cv2.resize(testImg, (256, 256))
#bgImg = cv2.imread('')
#blurBg = cv2.GaussianBlur(bgImg, (5, 5), 0)
#blurBg = cv2.resize(blurBg, (256, 256))

#testImg = cv2.GaussianBlur(testImg, (5, 5), 0)
cv2.imshow('testImg', testImg)
#plt.imshow(bgImg)
cv2.waitKey(0)
#plt.show()

modiImg = testImg.copy()    
ht, wd = modiImg.shape[:2]

print(modiImg[0][0][0])

for i in range(ht):
    for j in range(wd):
        r = modiImg[i][j][0]
        g = modiImg[i][j][1]
        b = modiImg[i][j][2]

        r1 = …
Run Code Online (Sandbox Code Playgroud)

python opencv image-processing python-3.x background-subtraction

1
推荐指数
1
解决办法
2111
查看次数