【发布时间】:2020-09-21 07:37:29
【问题描述】:
我想知道是否有另一种方法可以在 Opencv 中创建逐像素查找表。我现在所拥有的适用于小分辨率(每秒约 4 帧),但在高分辨率(小于每秒 1 帧)上运行缓慢。
我读到我可以使用 CUDA,但不知道如何使用它。如果这是唯一能有人指出我正确方向的方法吗?谢谢。
In header file:
Mat_<Vec<uchar,256>> _GB;
Mat_<Vec<uchar,256>> _GG;
Mat_<Vec<uchar,256>> _GR;
…
Mat VideoProcessor::CamCalib(Mat _tempFrame)
{
Mat_<Vec3b> _frame = _tempFrame;
for( int i = 0; i < _tempFrame.rows; ++i)
for( int j = 0; j < _tempFrame.cols; ++j )
{
_frame(i,j)[0] = _GB(i,j)[ _frame(i,j)[0] ];
_frame(i,j)[1] = _GG(i,j)[ _frame(i,j)[1] ];
_frame(i,j)[2] = _GR(i,j)[ _frame(i,j)[2] ];
}
_tempFrame = _frame;
return _tempFrame;
}
【问题讨论】:
-
为什么要这样做?为每个像素的每个组件创建一个大小为 256 的表似乎非常昂贵!例如,对于 1080p 图像,您需要为仅占用 6 Mio 的图片分配和填充 1.5 Gio 的内存!话虽如此,请注意您可以使用多线程来加速此代码(例如,使用 OpenMP)。
-
我只会使用 cuda 来改进你需要做的任何计算
标签: c++ algorithm performance opencv lookup