【发布时间】:2016-01-20 14:40:40
【问题描述】:
我正在使用带有 OpenCV 3.0 的 Visual Studio 2010。
以下代码尝试提取 HOG 特征以训练 SVM 分类器。但是,当我尝试在行中使用 HOG 的函数“计算”时
hog.compute(grayImg,descriptor,Size(),Size(),positions);
出现如下错误:
TrainSVM.exe 中 0x000007fefd9bb16d (KernelBase.dll) 中未处理的异常:Microsoft C++ 异常:内存位置 0x0026e1b0 处的 cv::Exception。
String imagesPath = "Positivas/*.jpg";
vector<String> fn;
glob(imagesPath, fn, true); // recursive, if you want
for (size_t i=0; i<fn.size(); i++)
{
Mat img = imread(fn[i]);
std::vector<cv::Point> positions;
positions.push_back(cv::Point(0,0));
std::vector<float> descriptor;
cv::Mat grayImg;//(patchHeight,patchWidth,CV_8UC1,0);
cvtColor( img, grayImg, COLOR_BGR2GRAY );
hog.compute(grayImg,descriptor,Size(),Size(),positions);
Mat auxDescriptor = cv::Mat(descriptor);
Mat descriptorMat(1,auxDescriptor.rows,CV_32FC1);
transpose(auxDescriptor, descriptorMat);
trainingData.push_back(descriptorMat);
trainingLabels.push_back(labelPositive);
}
对此有什么想法吗?提前致谢!
【问题讨论】:
-
这可能是 OpenCV 代码中的断言失败。我不使用 VS,但如果您可以使用它向您显示与异常相关的消息,这将帮助您识别问题。
-
@SSteve 我已经按照你的建议做了,我得到了下一条消息:OpenCV Error: Assertion failed ((n & (n - 1)) == 0) in cv::alignSize, file C:\builds\master_PackSlave-win64-vc12-shared\opencv\modules\core\include\opencv2/core /utility.hpp,第 347 行
-
好的,所以您知道调用
alignSize有问题。查看alignSize的文档,它说n 必须是2 的幂。如果 VS 会为您提供异常堆栈跟踪,您可以找出调用alignSize的内容以及为什么它使用不是 2 的幂的东西来执行此操作。或者查看hog.compute的文档,看看是否要求您传递的参数之一的大小必须是 2 的幂。 -
谢谢你,你是对的!我使用的窗口大小不是 2 的幂;)
-
太棒了!我将此作为答案发布。
标签: c++ visual-studio opencv