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 :et avec cette erreur :Code:
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) ); }
Voici mon code que j'ai réduis au maximum.Code:HEAP[Tracker10.exe]: Invalid address specified to RtlValidateHeap( 00740000, 031884D0 )
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 21Code:
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 }
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?