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);
}