Opencv3.0 OpenCV 3.0,为什么我可以';t用单元格大小=大小(5,5)计算HoG? 我在OpenCV 3上配置Visual C++ 2013程序。p>

Opencv3.0 OpenCV 3.0,为什么我可以';t用单元格大小=大小(5,5)计算HoG? 我在OpenCV 3上配置Visual C++ 2013程序。p>,opencv3.0,visual-c++-2013,Opencv3.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 &l

我尝试为重设为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;
}
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间cv;
使用名称空间std;
int main(){
HOGDescriptor hog;//在此处使用标准参数
hog.winSize=cv::Size(40,40);//纸张中使用的默认训练图像大小
cv::Size trainingPadding=cv::Size(0,0);
//具体参数
猪细胞大小=cv::大小(5,5);
hog.blockSize=cv::Size(10,10);
hog.blockStride=cv::大小(5,5);
hog.nbins=8;
cv::Size winStride=cv::Size(5,5);
//默认参数
/*猪细胞大小=cv::大小(8,8);
hog.blockSize=cv::Size(16,16);
hog.blockStride=cv::大小(8,8);
hog.nbins=9;
cv::Size winStride=cv::Size(8,8)*/
向量特征向量;
Mat imageDataRaw=imread(“../image1.ppm”,0);//读取图像
Mat图像数据;
调整大小(imageDataRaw、imageData、hog.winSize);
//检查尺寸是否不匹配
if(imageData.cols!=hog.winSize.width | | imageData.rows!=hog.winSize.height){
featureVector.clear();
printf(“错误:图像“%s”维度(%u x%u)与HOG窗口大小(%u x%u)不匹配!\n”、“image1.ppm”、imageData.cols、imageData.rows、HOG.winSize.width、HOG.winSize.height);
返回-1;
}
矢量位置;
hog.compute(图像数据、特征向量、winStride、训练填充、位置);
返回0;
}
我有一种感觉:


提前感谢。

至少在[OpenCV 2.4.12]上()只支持默认值。然而,在OpenCV 3.0中,这个限制似乎消失了。您可以发布一个工作示例吗?不,我指的是一个可以复制、粘贴和运行的自包含代码段()。我们并不总是有时间来完成您提供的代码片段中缺失的部分。如果你能发布它,这将节省我们很多时间,你会更快得到答案。简单地说,你能发布主要功能吗?我们开始吧。。。谢谢:好的。这个变量的相互大小有很多限制。这使得随意更改它们变得非常重要。你最好坚持使用默认参数。