Превратите QVideoFrame YUV420p в OpenCV мат в оттенках серого

Я создал фильтр, расширяющий QAbstractVideoFilter а также
QVideoFilterRunnable и я переопределил

QVideoFrame run(QVideoFrame* input, const QVideoSurfaceFormat &surfaceFormat, RunFlags flags)`

метод

Проблема в том, что QVideoFrame формат Format_YUV420P и не имеет ручки. Мне нужно преобразовать его в CV_8UC1 для того, чтобы использовать OpenCV алгоритмы.

Какой лучший способ сделать это?

-1

Решение

Сначала вам нужно создать cv::Mat который имеет API для инициализации с использованием указателя данных в виде:

cv::Mat img = cv::Mat(rows, cols, CV_8UC3, input.data/*Change this to point the first element of array containing the YUV color info*/)

Теперь, так как img инициализируется с данными цвета YUV, вы можете использовать различные cvtColor Режимы преобразования мата YUV в другие форматы, для преобразования его в оттенки серого вы можете попробовать:

cv::Mat gray;
cv::cvtColor(img, gray, cv::COLOR_YUV2GRAY_I420);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]