gpt4 book ai didi

c++ - OpencV中的背景和前景

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:41:06 24 4
gpt4 key购买 nike

我正在使用 OpenCV243 进行一个项目,我需要在流中获得前景,我的问题是我使用 cv::absdiff 来获得它并没有真正帮助,这是我的代码和结果.

#include <iostream>
#include<opencv2\opencv.hpp>
#include<opencv2\calib3d\calib3d.hpp>
#include<opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>

int main (){
cv::VideoCapture cap(0);
cv::Mat frame,frame1,frame2;
cap >> frame;
frame.copyTo(frame1);
cv::imwrite("background.jpeg",frame1);
int key = 0;
while(key!=27){
cap >> frame;
cv::absdiff(frame, frame1, frame2); // frame2 = frame -frame1
cv::imshow("foreground", frame2);
if(key=='c'){
//frame.copyTo(frame2);
cv::imwrite("foreground.jpeg", frame2);
key = 0;
}

cv::imshow("frame",frame);
key = cv::waitKey(10);
}
cap.release();
return 0;
}

Background foreground 正如你所看到的减法工作,但我想要得到的只是改变的值,例如如果背景中有一个像素 [130,130,130] 并且相同的像素有 [200,200,200 ] 在框架中我想得到最后的值而不是 [70,70,70]我已经看过本教程:http://mateuszstankiewicz.eu/?p=189但我无法理解代码,并且在使用我的 openCV 版本设置 cv::BackgroundSubtractorMOG2 时遇到问题

预先感谢您的帮助

最佳答案

BackgroundSubtractorMOG2 应该与 #include "opencv2/video/background_segm.hpp" 配合使用OpenCV 示例有两个很好的 c++ 示例(在 samples\cpp 目录中)。

  • bgfg_segm.cpp 展示了如何使用 BackgroundSubtractorMOG2
  • bgfg_gmg.cpp 使用 BackgroundSubtractorGMG

要获取最后的值(假设您打算获取前景像素值),您可以使用前景蒙版复制帧。这也在第一个示例中完成,在以下代码段中:

bg_model(img, fgmask, update_bg_model ? -1 : 0);
fgimg = Scalar::all(0);
img.copyTo(fgimg, fgmask);

关于c++ - OpencV中的背景和前景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16808838/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com