LINUX.ORG.RU

Qt+Cuda без пинг-понга

 , ,


0

1

Всем привет!

Как напрямую отрисовывать cv::cuda::GpuMat в QPainter? Я знаю способ с QImage, но это перекидывание обратно в CPU и затем обратно в видеопамять, чего не хочется. Посмотрел QPixmap - по ходу он не умеет инититься из GPU.

С QImage делаю примерно вот так:

QLabel* region;
Mat src;
QImage img;
Mat RGBframe;
if (m.channels()== 3)
{
    cv::cvtColor(src, RGBframe, CV_BGR2RGB);
    img = QImage((const unsigned char*)(RGBframe.data),
          RGBframe.cols,RGBframe.rows,QImage::Format_RGB888);
}
else
{
    img = QImage((const unsigned char*)(src.data),
                src.cols,src.rows,QImage::Format_Indexed8);
}
QPainter p(region);
p.drawImage(0,0,img);
p.end();

★★

у меня есть догадка, что то что ты задумал в рамках QPainter+QImage невозможно вообще

I-Love-Microsoft ★★★★★
()

Если хочется рисовать напрямую из GPU-данных, то надо использовать OpenGL. Раньше в документации на CUDA этот вопрос освещался.

trex6 ★★★★★
()
Последнее исправление: trex6 (всего исправлений: 1)
Ответ на: комментарий от aiqu6Ait

Ок. Теперь я отнаследовал свой QMyLabel от QOpenGLWidget и на нем рисую. Всё равно не ясно, как делать здесь связку с GpuMat

aido ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.