2

我正在做一个图像分类项目,想通过使用 OpenCV HOGDescriptor 来计算图像的 HOG 特征。网上有一些样品可用,但它们对我不起作用。有一个我无法理解的 open_stackdumpfile-error。我设置了一个新的空项目来识别错误,这就是我卡住的地方:

#include <cstdio>
#include <stdlib.h>
#include <iostream>
#include "opencv2\opencv.hpp"

#define IMG_PATH "D:\\ImageDatabase\\IMG_0024.png"

using namespace std;

int main(void) {
    cout << "hi!" << endl;

    cv::Mat mat = cv::imread(IMG_PATH);

    // show the image
    cv::namedWindow("Image", CV_WINDOW_AUTOSIZE);
    cv::moveWindow("Image", 0, 0);
    cv::imshow("Image", mat);

    cv::HOGDescriptor hog;
    vector<float> descriptors;
    hog.compute(mat, descriptors);

    cout << "finished." << endl;
    cv::waitKey(0);
    cout << "bye." << endl;
    return EXIT_SUCCESS;
}

计算描述符并用值填充向量。这就是输出:

hi!
finished.
bye.
      1 [main] TestProject 5932 open_stackdumpfile: Dumping stack trace to TestProject.exe.stackdump

stackdump 文件如下所示:

Stack trace:
Frame     Function  Args

你有什么想法,为什么会发生这个错误,它意味着什么以及我该如何解决它?我正在使用 Cygwin 使用 Windows 7 机器,并尝试了 OpenCV 2.4.1 和 2.4.6,但错误仍然相同。

感谢您对我可能做错的每一个提示!

[编辑] 编译器选项等如下所示:

make all 
rm -f TestProject.o TestProject.exe
g++ -O2 -g -Wall -fmessage-length=0  -I/cygdrive/D/VZE/Tools/opencv246/opencv/build/include  -I/cygdrive/D/VZE/Tools/opencv246/opencv/build/include/opencv  -I/cygdrive/D/VZE/Tools/opencv246/opencv/build/include/opencv2   -c -o TestProject.o TestProject.cpp
g++ -o TestProject.exe TestProject.o -L/cygdrive/D/VZE/Tools/opencv246/opencv/build/x86/mingw/bin -lopencv_highgui246 -lopencv_core246 -lopencv_imgproc246 -lopencv_objdetect246
4

2 回答 2

1

这个问题已经很老了,但仍然有一些观点,也许这可以帮助一些人:

首先,我没有真正的解决方案。代码一切正常,设置有问题。当std::vector<float> descriptors超出范围时程序崩溃了。不知何故,OpenCV 一直在处理它,我不知道为什么或如何。我在使用其他一些方法(例如计算 SIFT 描述符等)时也遇到了这种类型的错误。

我认为 Cygwin 上的预编译 OpenCV 版本存在一些问题。通过切换到 Ubuntu 或 Visual Studio 来避免 Cygwin 为我解决了这个问题。也许手动编译 OpenCV 也可以解决这个问题。

于 2015-05-29T18:44:12.567 回答
0

我无法在与在 WinXP、32Bit、MSVC++-2010-SP1、OpenCV 2.4.5 预构建二进制文件 build\x86\vc10\bin 下测试代码相同的条件下对此进行测试

错误不会出现在那里。我发现了一些将图像调整为hog.cellSize. 但这似乎不是很重要。

您应该尝试为 HOG 编译 opencv 示例。

opencv\samples\ocl\hog.cpp  
opencv\samples\gpu\hog.cpp  

两者都使用适当的图形卡和自构建 opencv。

如果您真的遇到这个问题,我可以尝试在真正的 linux 上运行该示例。但首先尝试使用调试信息构建它:

ommit the -O2 !  
g++ -g3 -D_DEBUG ...  
then use a debugger gdb,ddd,kdbg  
before that compile your opencv with the Debug version:  
cmake -DCMAKE_BUILD_TYPE=Debug ../opencv  
make && make install

如果你喜欢有一个很好的opencv HOG例子

于 2013-11-06T12:42:10.093 回答