异常 KernelBase.dll
Posted
技术标签:
【中文标题】异常 KernelBase.dll【英文标题】:Exception KernelBase.dll 【发布时间】: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 的幂;)
太棒了!我将此作为答案发布。
【参考方案1】:
在收到异常消息后,我们发现调用 alignSize
时断言失败。 alignSize
的文档要求参数是 2 的幂。从那里,我们查看了 hog.compute
的文档,发现它需要的窗口大小是 2 的幂。
【讨论】:
以上是关于异常 KernelBase.dll的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin 协程协程异常处理 ① ( 根协程异常处理 | 自动传播异常 | 在协程体捕获异常 | 向用户暴露异常 | 在 await 处捕获异常 | 非根协程异常处理 | 异常传播特性 )
Kotlin 协程协程异常处理 ① ( 根协程异常处理 | 自动传播异常 | 在协程体捕获异常 | 向用户暴露异常 | 在 await 处捕获异常 | 非根协程异常处理 | 异常传播特性 )