OpenCV IOS изменить размер мата

Я пытаюсь изменить размер циновки на лету, которую я накладываю на другое изображение. Изображение хранится на устройстве IOS в папке Assets.xcassets, и я передаю его своей функции, а затем использую UIImageToMat для преобразования его в cv:: Mat.

В качестве теста я хочу иметь возможность изменить его размер, чтобы он был вдвое меньше, но я сталкиваюсь с проблемами.

Когда я пытался overlay->resize(overlay->rows/2); Результат наложения просто показывает верхнюю половину того, что было.

Потом когда я попробовал cvResize(overlay, destPointer, CV_INTER_LINEAR); Я получаю ошибку:

ошибка: (-5) Неизвестный тип массива в функции cvarrToMat

C++:

cv::Point center;
int radius;
double NewRadius;

cv::Mat originphoto;
UIImageToMat(overlay, originphoto, 1);
cv::Mat *overlay = &originphoto;

center.x = cv::saturate_cast<int>((r->x + r->width*0.5) - overlay->size().width*0.5);
center.y = cv::saturate_cast<int>((r->y + r->height*0.5 - overlay->size().height*0.5));
radius = cv::saturate_cast<int>((r->width + r->height) / 2);
printf("%d",radius);
NewRadius = radius/1;
cv::Mat destination(overlay->rows/2, overlay->cols/2, 1);
cv::Mat *destPointer = &destination;

cvResize(overlay, destPointer, CV_INTER_LINEAR);

overlay = destPointer;

Любая помощь здесь будет принята с благодарностью, все еще очень плохо знакомой с обработкой изображений и не уверенной, как обращаться с этими cv::Mats, так как они являются матрицами.

1 ответ

Решение

Получил работу, используя:

cv::resize(*overlay, destination, cv::Size(), 0.5, 0.5);

Если кто-то еще сталкивается с этой проблемой, то вы идете:)

Другие вопросы по тегам