Я создал фильтр, расширяющий QAbstractVideoFilter
а также
QVideoFilterRunnable
и я переопределил
QVideoFrame run(QVideoFrame* input, const QVideoSurfaceFormat &surfaceFormat, RunFlags flags)`
метод
Проблема в том, что QVideoFrame
формат Format_YUV420P
и не имеет ручки. Мне нужно преобразовать его в CV_8UC1
для того, чтобы использовать OpenCV
алгоритмы.
Какой лучший способ сделать это?
Сначала вам нужно создать 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);
Других решений пока нет …