Почему opencv использует выходные параметры, а не просто возвращает выходные данные? - PullRequest
0 голосов
/ 12 апреля 2019

В c ++ мы можем принимать входные параметры и просто возвращать значения вызывающей функции, но opencv функции принимают выходные параметры в качестве аргументов функции.Есть ли для этого какие-либо причины для производительности или взаимодействия?Если нет, то каковы причины этого решения?

Mat img = cv::resize(someMat, ...);
cv::resize(someMat, img, ...);

1 Ответ

2 голосов
/ 12 апреля 2019

Существующий API лучше и быстрее. Это позволяет не выделять память каждый раз. В cv :: resize для dst Mat будет вызывать cv :: Mat :: create. Но если dst уже имеет тот же размер и тип, то это будет без нового выделения .

Например, я могу создать изображение 800x600 и для большого видеофайла изменить размер каждого кадра в этом буфере:

cv::Mat img(800, 600,...); // Initialization and memory allocation
...
for (; cap >> someMat;)
{
    cv::resize(someMat, img, ...); // No memory allocation, resizing into img
}

Для этого случая это будет N выделений памяти:

cv::Mat img;
for (; cap >> someMat;)
{
    img = cv::resize(someMat, ...); // New allocation inside cv::resize and free previous value
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...