OpenCV создать коврик из данных камеры

В моей программе есть функция, которая берет изображение с камеры и должна упаковать все данные в OpenCV Mat состав. Из камеры я получаю ширину, высоту и unsigned char* в буфер изображения. Мой вопрос заключается в том, как я могу создать Mat из этих данных, если у меня есть глобальная переменная Mat. Тип для структуры Mat я взял CV_8UC1.

Mat image_;

function takePhoto() {
    unsigned int width = getWidthOfPhoto();
    unsinged int height = getHeightOfPhoto();
    unsinged char* dataBuffer = getBufferOfPhoto();
    Mat image(Size(width, height), CV_8UC1, dataBuffer, Mat::AUTO_STEP);

    printf("width: %u\n", image.size().width);
    printf("height: %u\n", image.size().height);

    image_.create(Size(image.size().width, image.size().height), CV_8UC1);
    image_ = image.clone();

    printf("width: %u\n", image_.size().width);
    printf("height: %u\n", image_.size().height);
}

Когда я тестирую свою программу, я получаю право width а также height из image, но width а также height моего глобального мата image_ является 0, Как я могу поместить данные в мой глобальный Mat переменная правильно?

Спасибо.

1 ответ

Решение

К сожалению, ни clone() ни copyTo() успешно скопировать значения ширины / высоты в другой мат. По крайней мере, на OpenCV 2.3! Обидно, правда.

Однако вы можете решить эту проблему и упростить свой код, сделав функцию, возвращающую Mat, Таким образом, вам не нужно иметь глобальную переменную:

Mat takePhoto() 
{
    unsigned int width = getWidthOfPhoto();
    unsigned int height = getHeightOfPhoto();
    unsigned char* dataBuffer = getBufferOfPhoto();
    Mat image(Size(width, height), CV_8UC1, dataBuffer, Mat::AUTO_STEP);
    return Mat;
}

int main()
{
    Mat any_img = takePhoto();
    printf("width: %u\n", any_img.size().width);
    printf("height: %u\n", any_img.size().height);
}
Другие вопросы по тегам