OpenCV прерван (ядро сброшено), когда окно закрыто

Я пытаюсь прочитать кадр камеры и показать его через 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 ключ к завершению логики, он не вызывает никаких исключений.

Почему я получаю эту ошибку и как я могу ее решить?

1

Решение

Я думаю, ошибка в том, что вы пытаетесь отобразить GpuMat изображение с помощью imshow. Вам нужно скачать его на другой Mat прежде чем вы сможете отобразить его с помощью imshow.
Попробуй это

cv::Mat host;
frame_gpu.upload(frame);
frame_gpu.download(host)
cv::imshow("frame", host);
0

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

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

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