Я пытаюсь прочитать кадр камеры и показать его через cv::namedWindow
с помощью cv::cuda::GpuMat
,
Вот мой код C ++:
cv::namedWindow("frame", cv::WINDOW_OPENGL);
cv::resizeWindow("frame", FRAME_WIDTH, FRAME_HEIGHT);
while (true) {
cv::Mat frame;
cv::cuda::GpuMat frame_gpu;
camera.read(frame);
frame_gpu.upload(frame);
cv::imshow("frame", frame_gpu);
//frame_gpu.download(frame);
if (cv::waitKey(1) == 27) {
break;
}
}
cv::destroyAllWindows();
Если я закрываю окно, я получаю эту ошибку:
OpenCV Error: The function/feature is not implemented (You should explicitly call download method for cuda::GpuMat object) in getMat_, file /home/nvidia/opencv-3.2.0/modules/core/src/matrix.cpp, line 1276
terminate called after throwing an instance of 'cv::Exception'
what(): /home/nvidia/opencv-3.2.0/modules/core/src/matrix.cpp:1276: error: (-213) You should explicitly call download method for cuda::GpuMat object in function getMat_
Aborted (core dumped)
Если я наберу Esc
ключ к завершению логики, он не вызывает никаких исключений.
Почему я получаю эту ошибку и как я могу ее решить?
Я думаю, ошибка в том, что вы пытаетесь отобразить GpuMat
изображение с помощью imshow. Вам нужно скачать его на другой Mat
прежде чем вы сможете отобразить его с помощью imshow.
Попробуй это
cv::Mat host;
frame_gpu.upload(frame);
frame_gpu.download(host)
cv::imshow("frame", host);
Других решений пока нет …