BackgroundSubtractorMOG2,我可以从中保存图像。从BackgroundSubtractorMOG2保存图像时出错

时间:2015-02-26 05:56:15

标签: c++ opencv image-processing

我正在使用backgroundMOG2来保存带背景的图像,但程序会显示计数器,我需要用backgorund保存图像。

#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>
#include <opencv2/video/background_segm.hpp>


int main()
{
    cv::Mat frame;
    cv::Mat back;
    cv::Mat fore;

    //cv::Mat img;
    cv::VideoCapture cap("C:\\Users\\Pavilion\\Documents\\Visual Studio 2013\\Projects\\dynamic\\sherlock outtakes.avi");

    cv::BackgroundSubtractorMOG2 bg;
    bg.set("nmixtures", 3);

    //bg.bShadowDetecction=false;
    std::vector<std::vector<cv::Point>>countours;

    //cv::imread("C:\\Users\\Pavilion\\Documents\\Visual Studio 2013\\Projects\\video\\video\\frames\\frame122.jpg");
    //cv::VideoCapture Cap;
    //std::vector<std::vector<cv::point> >contours;

    cv::namedWindow("frame");
    cv::namedWindow("background");

    for (;;)
    {
        cap >> frame;
        bg.operator()(frame, fore);
        bg.getBackgroundImage(back);
        cv::erode(fore, fore, cv::Mat());
        cv::dilate(fore, fore, cv::Mat());
        cv::findContours(fore,countours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);
        cv::drawContours(frame, countours, -1, cv::Scalar(0, 0, 255), 1);
        cv::imshow("frame", back);
        // cv::imwrite("background",back);

        cv::imshow("background", frame);
        if (cv::waitKey(30) >=0) break;

}
    return 0;

}

这是我在保存图片时遇到错误的代码。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您需要指定扩展名(jpg,png,...)。

例如:

cv::imwrite("background.jpg",back);