我尝试使用opencv来计算HoG描述符,但引发了错误#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;
。
并且我不知道我的包含是否正确。
我的opencv包括:
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());
错误是在行
中引发的{{1}}
任何帮助将不胜感激!谢谢!
答案 0 :(得分:4)
您应该更改以下行:
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);