Работаю с библиотекой OpenCV 2 версии.
При помощи нее получаю указатель на изображение:
IplImage *frame; //я же правильно понимаю, это указатель?
От сюда я могу получать некие данные, обращаясь как к объекту, вроде:
int width = frame->width;
int height = frame->height;
Как правильнее работать с таким типом данных? Создаю довольно большой класс по работе с 1 кадром, который получаю с камеры. Много разных методов и временных "изображений" - объектов IplImage * (поправите если не правильно выразился)
Сейчас реализовано примерно так :
class opencv
{
private: IplImage *frame, *gray;
public: void getGray() {
this->gray = cvCreateImage(cvSize(this->frame->width, this->frame->height), this->frame->depth, 1);
cvConvertImage(this->frame, this->gray, CV_BGR2GRAY);
}
}
Т.е. я записываю в уже существующий указатель, но можно возвращать указатель из метода, вроде:
public: IplImage * getGray() {
IplImage *gray = cvCreateImage(cvSize(this->frame->width, this->frame->height), this->frame->depth, 1);
cvConvertImage(this->frame, gray, CV_BGR2GRAY);
return gray;
}
Но в таком случае появляется операция создания указателя!
Дак вот вопрос:
Как же работать правильнее с данным типом данных, вроде здравый смысл говорит что второй вариант "логичнее" и понятнее, особенно когда появляется 10-15 методов обработки 1 кадра. И каждый раз будет создание нового указателя. Долгая ли это операция ? Как понятно из контекста каждая мс дорога, именно поэтому и не работаю с типом Mat, этой же библиотеки т.к. скорость там оооочень храмает.
или же пойти по принципу самой библиотеки, передавать в метод 2 указателя: 1-ый входной, 2-ой выходной ?