将 YUV420p QVideoFrame 转换为灰度 OpenCV mat
Transform a YUV420p QVideoFrame into grayscale OpenCV mat
我创建了一个扩展 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);
我创建了一个扩展 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);