如何在自己的函数中最好地处理Mat中的不同数字格式
How to best handle different number formats in Mat in own functions
使用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;
}
}
我认为您应该使用模板函数。看见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)
来称呼它
相关文章:
- Difference in displaying cv2 Mat
- 如何在openssl-ecc中获取十六进制格式的私钥
- 将"打开的CV图像"中的"颜色"转换为整数格式
- TDateTime格式在C++Builder中不会更改
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 检查不带转换的扫描格式
- 当我尝试使用 sstream 和分面将 Boost Time_duration转换为字符串时,我没有得到所需的格式
- 是否可以从格式字符串中检索"width"
- clang格式:宏的缩进
- clang格式:禁用排序包含
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 将RGB图像保存为PPM格式
- 将CHW格式的浮点向量转换为cv::Mat
- 如何在自己的函数中最好地处理Mat中的不同数字格式
- 在图片框中显示cv::Mat格式的网络摄像头提要
- 如何将Mat数据(OpenCV,图像的数据格式)转换为unity3d texutre
- 用C++以特定格式打印openCV Mat内容
- OpenCV:为什么要创建多个 Mat 对象来转换图像的格式?
- 将opencv图像cv::Mat格式转换为c# BitmapImage