C++ 如何在自己的函数中最好地处理Mat中的不同数字格式
当使用OpenCV编写自己的函数,这些函数使用C++ 如何在自己的函数中最好地处理Mat中的不同数字格式,c++,opencv,opencv3.0,C++,Opencv,Opencv3.0,当使用OpenCV编写自己的函数,这些函数使用img.at(y,x),img.at(y,x),…,访问单像素值时,输入矩阵必须采用正确的格式。我可以想象一些不同的方法使这样的函数能够处理不同类型的Mat 在执行其他操作之前,将src转换为正确的格式。在“降级”数字空间的情况下,这可能会导致一些信息丢失,或者在“升级”的情况下(如果我没有弄错的话)会导致一些效率损失。但也许转换成CV_64U仍然非常有效 对于每一种输入矩阵,创建一个整体函数似乎并不十分优雅,但由于我是C++新手,我可能不习惯它。
img.at(y,x)
,img.at(y,x)
,…,访问单像素值时,输入矩阵必须采用正确的格式。我可以想象一些不同的方法使这样的函数能够处理不同类型的Mat
src
转换为正确的格式。在“降级”数字空间的情况下,这可能会导致一些信息丢失,或者在“升级”的情况下(如果我没有弄错的话)会导致一些效率损失。但也许转换成CV_64U
仍然非常有效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;
}
}
myfoo(施工材料和src、材料和dst)
{
dst=src.clone();
对于(int i=0;i
我认为您应该使用模板功能。看
试试这个:
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(施工材料和src、材料和dst)
{
dst=src.clone();
对于(int i=0;i
您可以使用myfoo(src,dst)调用它。我认为您应该使用模板函数。看 试试这个:
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(施工材料和src、材料和dst)
{
dst=src.clone();
对于(int i=0;i
您可以使用myfoo(src,dst)