我正在尝试在16位灰度OpenCV Mat上进行非常简单的(类似LUT)操作,这既有效又不会减慢调试器的速度。
虽然文档中有一页非常详细地介绍了这个问题,但它未指出大多数这些方法仅适用于8位图像(包括完美优化的LUT函数)。
我尝试了以下方法:
虽然文档中有一页非常详细地介绍了这个问题,但它未指出大多数这些方法仅适用于8位图像(包括完美优化的LUT函数)。
我尝试了以下方法:
uchar* p = mat_depth.data;
for (unsigned int i = 0; i < depth_width * depth_height * sizeof(unsigned short); ++i)
{
*p = ...;
*p++;
}
非常快,但很遗憾只支持uchart(就像LUT一样)。
int i = 0;
for (int row = 0; row < depth_height; row++)
{
for (int col = 0; col < depth_width; col++)
{
i = mat_depth.at<short>(row, col);
i = ..
mat_depth.at<short>(row, col) = i;
}
}
这段内容来源于以下回答:https://stackoverflow.com/a/27225293/518169。但是对我来说并没有起作用,而且速度非常慢。
cv::MatIterator_<ushort> it, end;
for (it = mat_depth.begin<ushort>(), end = mat_depth.end<ushort>(); it != end; ++it)
{
*it = ...;
}
功能良好,但它使用了大量CPU并使调试器变得超级缓慢。
这个答案https://stackoverflow.com/a/27099697/518169指向了内置LUT函数的源代码,但它只提到了高级优化技术,如IPP和OpenCL。
我正在寻找一个非常简单的循环,就像第一段代码一样,但是用于无符号短整型。
您推荐哪种方法来解决这个问题?我不需要极端优化,只需要与.data上的单for循环性能相当的东西。