Я студентка бакалавриата и создаю приложение для iPhone от HumanSeg, используя CoreML
. Поскольку моей модели требуется изменение размера и черный отступ на исходных видеокадрах, я не могу полагаться на Vision
(который обеспечивает только изменение размера, но без черного заполнения) и должен выполнить преобразовываю себя.
У меня CVPixelBuffer
фреймов, и я преобразовал их в cv::Mat
, используя следующие коды:
CVPixelBufferLockBaseAddress(pixelBuffer, 0);
int bufferWidth = (int) CVPixelBufferGetWidth(pixelBuffer);
int bufferHeight = (int) CVPixelBufferGetHeight(pixelBuffer);
int bytePerRow = (int) CVPixelBufferGetBytesPerRow(pixelBuffer);
unsigned char *pixel = (unsigned char *) CVPixelBufferGetBaseAddress(pixelBuffer);
Mat image = Mat(bufferHeight, bufferWidth, CV_8UC4, pixel, bytePerRow);
CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
/*I'll do my resizing and padding here*/
// How can I implement this function?
convertToCVPixelBuffer(image);
Но теперь, после завершения предварительной обработки, мне нужно преобразовать cv::Mat
обратно в CVPixelBuffer
скормить его модели CoreML
. Как я могу этого добиться? (Или Vision может добиться черной прокладки с помощью каких-то специальных приемов?)
Любая помощь будет оценена по достоинству.