无法派生"T"的模板参数
Failed to derive template parameters for "T"
我不知道
如何使用之前声明的函数,因为据说无法为T
派生模板参数;即函数模板不匹配。但是我如何使用该功能?这是代码。
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
template <typename T> void getOriginLbp(InputArray _src, OutputArray _dst){
Mat src = _src.getMat();
_dst.create(src.rows - 2, src.cols - 2, CV_8UC1);
Mat dst = _dst.getMat();
dst.setTo(0);
for (int i = 1; i < src.rows - 1; i++)
{
for (int j = 1; j < src.cols - 1; j++)
{
T center = src.at<T>(i, j);
unsigned char lbpcode = 0;
lbpcode |= (src.at<T>(i - 1, j - 1)>center) << 7;
lbpcode |= (src.at<T>(i - 1, j)>center) << 6;
lbpcode |= (src.at<T>(i - 1, j + 1) > center) << 5;
lbpcode |= (src.at<T>(i, j + 1) > center) << 4;
lbpcode |= (src.at<T>(i + 1, j + 1) > center) << 3;
lbpcode |= (src.at<T>(i + 1, j) > center) << 2;
lbpcode |= (src.at<T>(i + 1, j - 1) > center) << 1;
lbpcode |= (src.at<T>(i, j - 1) > center);
dst.at<uchar>(i - 1, j - 1) = lbpcode;
}
}
}
int main()
{
Mat srcImg = imread("pep.jpg");
cvtColor(srcImg, srcImg, COLOR_BGR2GRAY);
Mat LbpImg;
getOriginLbp(srcImg, LbpImg);
imshow("originLbp", LbpImg);
return 0;
}
那么如何使用getOriginLbp
功能呢?也许我使用了错误的参数?
调用模板化函数时必须提供一个类型,如下所示:
getOriginLbp<type>(srcImg, LbpImg);
我不确定在你的情况下应该type
什么。也许Mat
.
编辑
好的,我正在查看OpenCV文档,看起来type
应该是存储在矩阵,int
,double
等中的任何内容的数据类型。看起来您正在读取图像数据。只需尝试int
和double
,看看是否有效。如果没有,cout
矩阵中的元素以尝试推断其类型。
相关文章:
- 在派生函数中指定void*参数
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- 使用 std::enable_if 限制派生类的模板参数时出现编译错误
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 创建派生自可变参数模板包的类型元组
- 如何将成员函数作为参数传递并在派生对象上执行方法列表
- 派生类(构造函数具有参数)和基类(构造函数缺少参数)之间没有可行的转换
- C++派生类重载函数(带有 std::function 参数)不可见
- C++ 事件管理器的回调,使用 std::function 和 std:bind 以及派生类作为参数
- 从模板参数派生的类
- C++ 如何使派生类自动获取基类参数
- C++ 将派生类的成员函数指针作为参数传递时选择了错误的模板专用化
- 如何在派生类中正确覆盖具有不同参数的函数?
- 根据参数创建派生类的新实例
- 具有派生参数的函数重写
- 将派生类作为参数传递给方法,该方法是具有智能指针的基类
- 将方法参数类型更改为子类中的派生类
- 派生类的模板参数推导
- 将派生类构造函数参数传递给受保护的成员
- 具有原始方法参数派生类的 C++ 重载方法参数