如何在自己的函数中最好地处理 Mat 中的不同数字格式
Posted
技术标签:
【中文标题】如何在自己的函数中最好地处理 Mat 中的不同数字格式【英文标题】:How to best handle different number formats in Mat in own functions 【发布时间】:2016-06-07 15:38:43 【问题描述】:当使用 OpenCV 编写自己的函数并使用 img.at<uchar>(y,x)
、img.at<float>(y,x)
、...访问单个像素值时,输入矩阵必须采用正确的格式。我可以想象一些不同的方法来使这样的函数能够处理不同类型的Mat
。
在执行其他操作之前将src
转换为正确的格式。这可能会导致在“降级”数字空间的情况下丢失一些信息,或者在“升级”的情况下导致一些效率损失(如果我做对了)。但也许转换成CV_64U
还是很有效的?
为每种类型的输入矩阵创建一个完整的函数似乎不是很优雅,但由于我是 C++ 新手,我可能不习惯。
创建 if-else 语句以区分函数本身内的 Mat
类型。
还有其他一些我不知道的方法吗?有没有一种在效率、编码优雅和努力方面最好的方法?
这是一个小例子函数:
myfoo(const Mat& src, Mat& dst)
dst = src.clone();
for (int i = 0; i < dst.rows; i++)
for (int j = 0; j < dst.cols; j++)
dst.at<uchar>(i, j) = i * j;
【问题讨论】:
【参考方案1】:我认为你应该使用模板函数。见http://en.cppreference.com/w/cpp/language/function_template
试试这个:
template <class T>
myfoo(const Mat& src, Mat& dst)
dst = src.clone();
for (int i = 0; i < dst.rows; i++)
for (int j = 0; j < dst.cols; j++)
dst.at<T>(i, j) = i * j;
您可以使用myfoo<uchar>(src, dst)
调用它
【讨论】:
以上是关于如何在自己的函数中最好地处理 Mat 中的不同数字格式的主要内容,如果未能解决你的问题,请参考以下文章
如何最好地处理 Neuraxle 管道中的错误和/或丢失数据?
在颤动中 - 我如何最好地处理和分配预先确定的键给 json 中的嵌套列表/数组
如何最好地处理 PHP 中构造函数接收强制非空值的情况,该值可能并不总是被初始化?