Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCV:HOGDescriptor.compute_C++_Opencv - Fatal编程技术网

C++ OpenCV:HOGDescriptor.compute

C++ OpenCV:HOGDescriptor.compute,c++,opencv,C++,Opencv,我正在做一个图像分类项目,希望通过使用OpenCV HOGDescriptor计算图像的HOG特征。网上有一些样品,但它们不适合我。有一个我无法理解的开放式文件错误。我设置了一个新的空项目来识别错误,这就是我遇到的问题: #include <cstdio> #include <stdlib.h> #include <iostream> #include "opencv2\opencv.hpp" #define IMG_PATH "D:\\ImageDatab

我正在做一个图像分类项目,希望通过使用OpenCV HOGDescriptor计算图像的HOG特征。网上有一些样品,但它们不适合我。有一个我无法理解的开放式文件错误。我设置了一个新的空项目来识别错误,这就是我遇到的问题:

#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;
}
stackdump文件如下所示:

Stack trace:
Frame     Function  Args
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
你知道为什么会发生这个错误吗?它意味着什么?我如何解决它? 我使用Cygwin在Windows7机器上工作,并尝试了OpenCV 2.4.1和2.4.6,但错误仍然相同

每一个关于我可能做错什么的暗示都很感激

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

Stack trace:
Frame     Function  Args
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

在WinXP、32位、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

如果你想举一个很好的例子,这个问题很老了,但仍然有一些观点,也许这可以帮助一些人:

首先,我没有真正的解决办法。代码一切正常,安装有问题。 当
std::vector描述符
超出范围时,程序崩溃。不知怎的,OpenCV控制着它,我不知道为什么或者如何。我还使用其他一些方法(如计算SIFT描述符等)遇到了这种类型的错误


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

您可以尝试设置
hog::compute
的附加参数吗?像这样:
向量位置;计算(矩阵、描述符、大小(0,0)、大小(0,0)、位置)。错误是否更改?即使设置了其他参数,错误仍然保持不变。我使用预构建的二进制文件build\x86\mingw。编译openCV HOG示例不起作用,因为ocl和gpu库不是预先构建的。当我试图制作OpenCV以构建这些LIB时,有几个后续错误我还无法解决。下周我会再试一次,然后报告。链接的示例正是我所发现的,但正如我所说,这在我的案例中不起作用。