我尝试使用opencv计算HoG描述符,但是报错call to "Mat" is ambiguous
被提出。
我在Error: Mat is ambiguous when using OpenCV下看到了答案
而且我不知道我的包含是否正确。
我的 opencv 包括:
#include <opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv/cv.hpp>
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <opencv2/ml/ml.hpp>
#include <string>
using namespace std;
using namespace cv;
using namespace cv::ml;
代码如下:
for (int j = 0; j < original[i]; j++) {
cv::Mat train_original;
train_original = cv::imread(original_path + std::to_string(j) + ".jpg", 1);
cv::resize(train_original, train_resize_image, cv::Size(128, 128), 0, 0, CV_INTER_LINEAR);
// 计算HOG descriptor
cv::HOGDescriptor hog(cv::Size(128, 128), cv::Size(64, 64), cv::Size(16, 16), cv::Size(8, 8), 9);
hog.compute(train_resize_image,train_descriptor);
cv::Mat descriptor_mat(cv::Mat(train_descriptor).t());
train_descriptors.push_back(descriptor_mat);
}
哪里train_descriptor
类型为 std::vector<float>
行中出现错误
cv::Mat descriptor_mat(cv::Mat(train_descriptor).t());
任何帮助将不胜感激!谢谢!
最佳答案
您应该更改以下行:
cv::Mat descriptor_mat(cv::Mat(train_descriptor).t());
与
cv::Mat descriptor_mat = cv::Mat(train_descriptor).t();
因为 Mat operator =
可以处理 MatExpr
对象,而 Mat
构造函数不能(检查 OpenCV documentation )。但要小心使用此方法,因为它不会复制数据并共享它(如指针)。基本上,如果您想复制数据,您可以执行以下操作:
cv::Mat descriptor_mat;
cv::transpose(cv::Mat(train_descriptor),descriptor_mat);
关于c++ - opencv:对 "Mat"的调用不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48166778/