本文介绍了如何填补空白并改善前景提取?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想改善我的opencv.js项目中的前景提取,我正在从静态背景中提取运动前景,我的输出前景有差距并且有点嘈杂.我该如何用原始的前景对象颜色填充这些空白?

I want to improve my foreground extraction on my opencv.js project.I am extracting moving foreground from static background.My output foreground have gaps and little bit noisy. How can i fill this gaps with original foreground object color?

输入

输出

这是我的代码:

let video = document.getElementById('videoInput');
let cap = new cv.VideoCapture(video);

let frame = new cv.Mat(video.height, video.width, cv.CV_8UC4);
let fgmask = new cv.Mat(video.height, video.width, cv.CV_8UC1);
let fgbg = new cv.BackgroundSubtractorMOG2(500, 16, false);

const FPS = 30;
function processVideo() {
    try {
        if (!streaming) {
            // clean and stop.
            frame.delete(); fgmask.delete(); fgbg.delete();
            return;
        }
        let begin = Date.now();
        // start processing.
        cap.read(frame);
        fgbg.apply(frame, fgmask);

        frame.copyTo(fgmask, fgmask)    
        cv.imshow('canvasOutput', fgmask);
        // schedule the next one.
        let delay = 1000/FPS - (Date.now() - begin);
        setTimeout(processVideo, delay);
    } catch (err) {
        utils.printError(err);
    }
};

// schedule the first one.
setTimeout(processVideo, 0);

推荐答案

应用腐蚀,然后拨号到最终图像,调整内核大小和迭代次数以获得最佳结果

apply erosion then dialation to final image, adjust the kernel size and number of iterations to get the best results

内核= np.ones((5,5),np.uint8)

kernel = np.ones((5,5),np.uint8)

erosion = cv.erode(img,kernel,iterations = 1)

erosion = cv.erode(img,kernel,iterations = 1)

dilation = cv.dilate(img,kernel,iterations = 1)

dilation = cv.dilate(img,kernel,iterations = 1)

这篇关于如何填补空白并改善前景提取?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-17 00:01