Не удается сохранить изображение, снятое с веб-камеры (ошибка компиляции в OpenCV 2.3) - PullRequest
3 голосов
/ 22 июля 2011

Я делаю простую программу для веб-камеры с использованием OpenCV 2.3 и застрял из-за ошибки компиляции.Любая идея будет оценена.

После компиляции я получаю следующую ошибку при imwrite (в функции чтения в коде ниже).

Этот пример , который использует imwrite длясохранить изображение работает в моей среде, что означает, что imwrite в OpenCV 2.3 должен работать на моем env.

ошибка:

error: invalid initialization of reference of type ‘const cv::_InputArray&’ from expression of type ‘cv::Mat*’
/usr/local/include/opencv2/highgui/highgui.hpp:110: error: in passing argument 2 of ‘bool cv::imwrite(const std::string&, const cv::_InputArray&, const std::vector<int, std::allocator<int> >&)’

выдержка из кода:

#include <iostream>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"

using namespace std;
using namespace cv;

//IplImage* SampleClassA::dispImg = NULL;
Mat* SampleClassA::dispImg = NULL;

int read()
{
        Mat* sharedImg;
    sharedImg = getFrame();
    if (sharedImg)
    {
        if (dispImg == NULL)
        {
            SampleClassA::dispImg = sharedImg;
        }
        Mat outMat;
        outMat = imwrite("./out/sample.jpg", sharedImg);
    }
    sleep(100);
    return 1;
}

Mat* getFrame()
//IplImage* ReadRealTime::getFrame()
{
    if (!capture.isOpened()) // Actual capturing part is omitted here.
    {
        return NULL;
    }
    Mat frame;
    capture >> frame;
    return &frame;
}
</code>

Кстати, Я запутался, принимает ли imwrite 2 аргумента или 3. И следующая ссылка, и файл highgui.hpp на моей машине говорят 3 аргумента, но в приведенном выше примере кода ( из ros.org ) используется только 2(потому что я делаю то же самое)http://opencv.itseez.com/modules/highgui/doc/reading_and_writing_images_and_video.html?highlight=imwrite#imwrite

пс.Прости, что я разместил здесь тот же вопрос с тем, который я отправил на OpenCV@yahoogroups.com, если вы подписываетесь на него.Я сделал это потому, что этот сайт кажется более интерактивным и удобным для различных целей.

1 Ответ

2 голосов
/ 22 июля 2011

Третий параметр является необязательным (массив параметров, зависящих от формата). Вы получаете ошибку, потому что «sharedImage» имеет тип Mat *, который не может автоматически приводиться к «const cv :: _ InputArray &», ожидаемому типу для imwrite. Если вы посмотрите на пример более внимательно, вы увидите, что тип параметра, передаваемого в качестве второго, на самом деле является «Mat» (не Mat *). Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...