Bonjour,
Je fais actuellement quelque tutoriel sur openCV en utilisant visual studio 2012 et je rencontre un problème que je n'arrive pas à résoudre.
quand mon programme arrive a la dernière ligne du main (sur le return final donc) il "plante" avec un "has triggered a breakpoint" en ouvrant le fichier "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\crt\src\dbgheap.c" a cette endroit :
1 2 3 4 5 6 7 8 9 10 11 12
| extern "C" _CRTIMP int __cdecl _CrtIsValidHeapPointer(
const void * pUserData
)
{
if (!pUserData)
return FALSE;
if (!_CrtIsValidPointer(pHdr(pUserData), sizeof(_CrtMemBlockHeader), FALSE))
return FALSE;
return HeapValidate( _crtheap, 0, pHdr(pUserData) );
} |
et avec cette erreur :
HEAP[Tracker10.exe]: Invalid address specified to RtlValidateHeap( 00740000, 031884D0 )
Voici mon code que j'ai réduis au maximum.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| #include <iostream>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\nonfree\features2d.hpp>
#pragma comment(lib, "opencv_highgui247d.lib")
#pragma comment(lib, "opencv_core247d.lib")
#pragma comment(lib, "opencv_features2d247d.lib")
#pragma comment(lib, "opencv_nonfree247d.lib")
int main() {
cv::Mat object = cv::imread("C:/Users/weanz/Downloads/Tracker10/Debug/label1.jpg", CV_LOAD_IMAGE_GRAYSCALE);
if(object.empty())
exit(0);
std::vector<cv::KeyPoint> keypointsO;
cv::SurfFeatureDetector surf(1000);
surf.detect(object,keypointsO);
std::cout <<"size = "<<keypointsO.size();
std::cout <<"Avant crash";
system("pause"); // ne crash pas
return 1; // crash
} |
Le seul moyen pour faire fonctionner le programme est de spécifier la taille du vector a la ligne 16 qui doit être égal à la valeur obtenu a la ligne 21
On obtient alors ceci : "std::vector<cv::KeyPoint> keypointsO(964);".
Hélas la taille varie en fonction des dimensions de l'image et de la valeur d'initialisation de surf. Comment faire pour calculer cette taille a l'avance ou pour utiliser un autre moyen d'initialisation qui ne me force pas a connaitre la taille du vector dès le début?
Partager