opencv:打电话给" Mat"很暧昧

时间:2018-01-09 11:04:34

标签: c++ opencv computer-vision

我尝试使用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;

我在Read the documentation

下看到了答案

并且我不知道我的包含是否正确。

我的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}}

任何帮助将不胜感激!谢谢!

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);