无法派生"T"的模板参数

Failed to derive template parameters for "T"

本文关键字:参数 派生      更新时间:2023-10-16
我不知道

如何使用之前声明的函数,因为据说无法为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应该是存储在矩阵,intdouble等中的任何内容的数据类型。看起来您正在读取图像数据。只需尝试intdouble,看看是否有效。如果没有,cout矩阵中的元素以尝试推断其类型。