Я хочу конвертировать QVideoFrame в OpenCV Mat. Кадр отображается в режиме только для чтения.
Я написал следующий код:
cv::Mat openCVBGRMatFrom(const QVideoFrame& frame)
{
auto width = frame.width();
auto height = frame.height();
auto* bits = const_cast<uchar*>(frame.bits());
cv::Mat result(height, width, CV_8UC3, cv::Scalar{0});
cv::Mat tmp{height + height/2, width, CV_8UC1, bits};
switch (frame.pixelFormat()) {
case QVideoFrame::Format_YUYV:
cv::cvtColor(tmp, result, cv::COLOR_YUV2BGR_YUYV);
break;
default:
throw std::runtime_error{"Unknown YUV pixel format"};
}
return result;
}
Но когда я запускаю его, я получаю следующее сообщение об ошибке во время выполнения:
terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(4.0.0-pre) ../modules/imgproc/src/color.hpp:253: error: (-215:Assertion failed) VScn::contains(scn) && VDcn::contains(dcn) && VDepth::contains(depth) in function 'CvtHelper'
Я думаю, что этот пост не является дубликатом, потому что … Что не так с моим кодом?
Задача ещё не решена.
Других решений пока нет …