Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如果函数使用OPENCV Mat作为输入,如何写入头文件?_C++_Opencv_Templates - Fatal编程技术网

C++ 如果函数使用OPENCV Mat作为输入,如何写入头文件?

C++ 如果函数使用OPENCV Mat作为输入,如何写入头文件?,c++,opencv,templates,C++,Opencv,Templates,我使用Mat_uuType作为输入编写了一个函数,该函数的语法如下: #include<iostream> #include"opencv2\opencv.hpp" using namespace std; using namespace cv; Mat_<double> histcost(Mat_<double> BH1, Mat_<double> BH2) { Mat_<double> output; ...

我使用Mat_uuType作为输入编写了一个函数,该函数的语法如下:

#include<iostream>
#include"opencv2\opencv.hpp"

using namespace std;
using namespace cv;

Mat_<double> histcost(Mat_<double> BH1, Mat_<double> BH2) {
    Mat_<double> output;
    ...
    return output;
}
#包括
#包括“opencv2\opencv.hpp”
使用名称空间std;
使用名称空间cv;
材料成本(材料BH1、材料BH2){
材料输出;
...
返回输出;
}
但当我尝试编写此函数的头文件时:

#pragma once
extern Mat_<double> histcost(Mat_<double> BH1, Mat_<double> BH2);
#pragma一次
外部材料成本(材料BH1、材料BH2);
它给了我一个错误:Mat_uu不是一个模板


我对功能管理不是很熟悉,如果有人能帮助我,我将非常感激

不要使用
Mat
只要使用常规的
cv::Mat()
cv::Mat可以包含任何类型的数据,您不需要告诉它类型

Mat
是一种特殊的捷径,可以直接从固定数据制作cv:Mat,除非您真的在进行性能调整,并且知道自己在做什么,否则不应该在任何地方使用它

Mat<>
语法示例(仅用于搜索)


Mat X=(Mat_4,4)您需要在源代码中包含“opencv2\opencv.hpp”头文件。该头文件包含函数声明以及所需的所有类型/类/模板。谢谢。但我确实包含了“opencv2\opencv.hpp”我的函数源代码中的头文件,这在我上面的代码中很明显。它不起作用。可能我误解了你的观点,我也试图将它包含在头文件中,但也不起作用。或者如果我没有听从你的评论,你能给我提供更多详细信息吗?在声明
histcost
之前添加
include
语句>在头文件中。头文件将包含在其他不了解OpenCV的代码中,但需要了解OpenCV才能使用您的函数。因此,将OpenCV头文件包含在头文件中,以便在包含头文件时,OpenCV头文件也会自动包含,编译器将我理解这些类和模板。在你的CPP文件中,包括你自己的头文件。在你的头文件中,不要使用
extern
,它从C++11开始就没有使用过。我非常感谢你的帮助!我试图添加
#包括“opencv2/opencv.hpp”
在我的头文件中。但它仍然会给我错误。但是你帮了我很多忙,谢谢。如果你对这个问题了解得更多,那就太好了。@Cris Luengo,是的,你是对的!我需要做的就是
#包括
。我忘记了
使用命名空间cv;
所以它仍然不起作用。这是一个愚蠢的错误。非常感谢你非常感谢您的帮助!谢谢您的回答。如果我能用
cv::Mat
完成任务,我就永远不会去
Mat\uuuu
。我的代码涉及很多矩阵运算,比如乘法、行运算……所以,我必须去。但是,您有没有关于我问题解决方案的线索?@ChrisDing,只需在函数c中使用cv::Mat即可所有。您的问题是您以错误的方式使用宏-请参阅