Создайте матрицу openCV из повернутого CVPixelBufferRefIOS

Программируем под IOS
Anonymous
Создайте матрицу openCV из повернутого CVPixelBufferRef

Сообщение Anonymous »

У меня есть прямая трансляция видео, подключенная к MLModel. Чтобы получить правильные нормализованные координаты на основе обнаружений MLModel, я установил для параметра videoOrientation AVCaptureConnection значение «Портрет».
Это прекрасно работает, и мои обнаружения правильно отображаются на экране.
Это отлично работает, и мои обнаружения правильно отображаются на экране.
Это прекрасно работает, и мои обнаружения правильно отображаются на экране.
p>
Но у меня есть второй этап, на котором я должен превратить CVPixelBufferRef в матрицу openCV.
Проблема в том, что мой код, который обычно обрабатывает это, производит мусор чередующиеся пиксели. После некоторого расследования я обнаружил, что если я не изменил выходную видеоориентацию (и, таким образом, она останется «Пейзаж справа»), то преобразование буфера пикселей в матрицу openCV работает как положено.
Как я могу изменить стандартный метод преобразования (ниже), чтобы правильно считать CVPixelBufferRef в матрицу openCV?

Код: Выделить всё

CVPixelBufferLockBaseAddress(pixelBuffer, 0);
void *baseaddress = CVPixelBufferGetBaseAddress(pixelBuffer);

mat = cv::Mat(videoRect.size.height, videoRect.size.width, CV_8UC4, baseaddress, 0);

CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);
Я попробовал поменять местами ширину и высоту и попробовал только два видеоформата, которые, кажется, работают с MLModel (kCVPixelFormatType_32BGRA и kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange)
Любой Помощь будет принята с благодарностью! Прикреплено изображение созданного в данный момент cv::Mat (маленькое поврежденное изображение в левом верхнем углу). Если я не установлю выходную ориентацию, полученное изображение будет правильным (хотя и повернутым).
[img]https://i.sstatic. net/jybdNBfF.jpg[/img]


Подробнее здесь: https://stackoverflow.com/questions/785 ... lbufferref

Вернуться в «IOS»