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
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!
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.