2017-07-27 3 views
2

Ich habe versucht, die HOG Merkmalsextraktor von OpenCV (3.2) zu verwenden, aber es verursacht immer eine Zugriffsverletzung (sorry über den Deutsch Text):Zugriffsverletzung mit hog.compute (...) in OpenCV

Ausnahme ausgelöst bei 0x000007FEC6AB12F5 (opencv_world320d.dll) in roi_detect.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x0000000000000000. 

Ich habe bereits versucht, mehrere Parameter und Bilder in verschiedenen Größen zu verwenden, aber diese Ausnahme wird jederzeit verursacht.

Bitte nehmen Sie sich einen Blick auf folgenden Code-snipped:

cv::Mat mat = cv::imread(input, cv::IMREAD_GRAYSCALE);  
cv::Mat res; 
cv::Size size(128, 128); 
cv::resize(mat, res,size); 
cv::HOGDescriptor hog(cv::Size(128,128), cv::Size(8, 8), cv::Size(4,4), cv::Size(4, 4), 9); 
std::cout << "Computing HOGs..." << std::endl; 
hog.compute(res, descriptor); 
std::cout << "Computed HOGs" << std::endl; 

ich eigentlich habe das Bild auf die Größe der „WinSize“ Parameter, auch wenn einige Quellen sagen, die Größe verändert, dass es eigentlich nicht die Ursache ist dieses Problem.

+0

Welcher Compiler? Debuggen oder Releasebuild? Und bitte, machen Sie eine vollständige [mcve], die das Problem reproduziert (etwas, das wir nur kompilieren können, ohne weiteren Code hinzufügen zu müssen) –

+1

Ich werde bald den vollständigen Code bereitstellen. MSVC14 und sowohl debuggen als auch release. Die DLLs sind auch VC14-Builds. –

+0

Ich habe die Frage entsprechend aktualisiert. Sie müssen das Bild nur als Graustufen lesen. –

Antwort

0

Ich habe die Antwort auf das Problem gefunden, falls andere Leute auf das gleiche Problem stoßen.

Stellen Sie sicher, dass die Release-Versionen der OpenCV-DLLs für Ihre Anwendung verfügbar sind, wenn Sie die Anwendung als Release in Visual Studio erstellen.

Ich habe die DLLs versehentlich mit dem Suffix "d" im Arbeitsverzeichnis meiner Anwendung abgelegt, die als "Release" erstellt wurde. Dies verursachte das Problem.