2

我在使用 OpenCV 3.0 配置的 Visual c++ 2013 上编程。

我尝试为重新调整为 40x40 像素的图像计算 HoG 描述符。

我的以下代码适用于默认参数:

hog.cellSize = cv::Size(8, 8);
hog.blockSize = cv::Size(16, 16);
hog.blockStride = cv::Size(8, 8);
hog.nbins = 9;
winStride = cv::Size(8, 8);

但使用不同的参数它不起作用:

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/video/tracking.hpp>
#include <opencv2/features2d/features2d.hpp>
#include <opencv2/objdetect/objdetect.hpp>

using namespace cv;
using namespace std;

int main(){
HOGDescriptor hog; // Use standard parameters here

hog.winSize = cv::Size(40, 40); // Default training images size as used in paper
cv::Size trainingPadding = cv::Size(0, 0);


// specific parameters
hog.cellSize = cv::Size(5, 5);
hog.blockSize = cv::Size(10, 10);
hog.blockStride = cv::Size(5, 5);
hog.nbins = 8;
cv::Size winStride = cv::Size(5, 5);

// default parameters
/*hog.cellSize = cv::Size(8, 8);
hog.blockSize = cv::Size(16, 16);
hog.blockStride = cv::Size(8, 8);
hog.nbins = 9;
cv::Size winStride = cv::Size(8, 8);*/

vector<float> featureVector;
Mat imageDataRaw = imread("../image1.ppm", 0);// read an image
Mat imageData;
resize(imageDataRaw, imageData, hog.winSize);
// Check for mismatching dimensions
if (imageData.cols != hog.winSize.width || imageData.rows != hog.winSize.height) {
    featureVector.clear();
    printf("Error: Image '%s' dimensions (%u x %u) do not match HOG window size (%u x %u)!\n", "image1.ppm", imageData.cols, imageData.rows, hog.winSize.width, hog.winSize.height);
    return -1;
}
vector<Point> locations;

hog.compute(imageData, featureVector, winStride, trainingPadding, locations);

return 0;
}

我有一个 SEHException:

SEH异常

先感谢您。

4

0 回答 0