Error cvFindContour en Opencv

Iniciado por JaviWar, 19 Marzo 2013, 18:43 PM

0 Miembros y 1 Visitante están viendo este tema.

JaviWar

Buenas estoy intentando contar los contornos de una foto que contiene pelotas.
Este es el código y el error que me da al ejecutar. No sé a que puede ser debido. La apli no esta terminada.

CODIGO

#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include "stdio.h"

int Nc;
CvSeq* contour = NULL;

int main(int argc, char* argv[]){
   
   static CvMemStorage* memoria = 0;

   cvNamedWindow( "Contours 2", 1 );
   IplImage* img_color = cvLoadImage( "celulas.jpg", 0 );   
   IplImage* img_contorno = cvCreateImage( cvGetSize(img_color), 8, 1 );
   IplImage* img_final = cvCreateImage( cvGetSize(img_color), 8, 3 );
   
   cvThreshold( img_color, img_contorno, 50,150, CV_THRESH_BINARY );

   Nc = cvFindContours(img_contorno, memoria, &contour,sizeof(CvContour),CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0) );   

   printf( "Total Contours Detected: %d\n", Nc );

   cvShowImage( "Contours 2", img_contorno );

   cvWaitKey();
   cvDestroyWindow( "Contours 2" );
   cvReleaseImage( &img_color );
   cvReleaseImage( &img_contorno );
   cvReleaseImage( &img_final );
   return 0;
}

ERROR

OpenCV ERROR: Null pointer ()
   in function cvStartFindContours, cvcontours.cpp(209)
Terminating the application...
Violación de segmento

avesudra

#1
Lo más seguro es que se te haya olvidado inicializar la memoria:
static CvMemStorage* memoria = 0;
Que conste que no entiendo de OpenCV pero es lo más lógico siendo una violación de segmento.Para inicializarla creo que debes hacer esto:
memoria = cvCreateMemStorage(0);
¡Un saludo!
Regístrate en

JaviWar

#2
Muchas gracias, voy a probar, es que llevo con esto bastante y no me acaba de quedar claro, como no hay nada así especifico para ver como van las cosas... es un poco un lío.

Probado y perfecto, muchas gracias de nuevo.