Estoy haciendo un trabajo de detección usando OpenCV, y necesito usar la transformación de distancia. Excepto que la función de transformación de distancia en opencv me da una imagen que es exactamente la misma que la imagen que uso como fuente. ¿Alguien sabe lo que estoy haciendo mal? Aquí está la porción de mi código:Transformación de distancia OpenCV que da salida a una imagen que se ve exactamente como la imagen de entrada
cvSetData(depthImage, m_rgbWk, depthImage->widthStep);
//gotten openCV image in "depthImage"
IplImage *single_channel_depthImage = cvCreateImage(cvSize(320, 240), 8, 1);
cvSplit(depthImage, single_channel_depthImage, NULL, NULL, NULL);
//smoothing
IplImage *smoothed_image = cvCreateImage(cvSize(320, 240), 8, 1);
cvSmooth(single_channel_depthImage, smoothed_image, CV_MEDIAN, 9, 9, 0, 0);
//do canny edge detector
IplImage *edges_image = cvCreateImage(cvSize(320, 240), 8, 1);
cvCanny(smoothed_image, edges_image, 100, 200);
//invert values
IplImage *inverted_edges_image = cvCreateImage(cvSize(320, 240), 8, 1);
cvNot(edges_image, inverted_edges_image);
//calculate the distance transform
IplImage *distance_image = cvCreateImage(cvSize(320, 240), IPL_DEPTH_32F, 1);
cvZero(distance_image);
cvDistTransform(inverted_edges_image, distance_image, CV_DIST_L2, CV_DIST_MASK_PRECISE, NULL, NULL);
En pocas palabras, I grad la imagen desde el kinect, girar como una imagen de un canal en, alisarla, ejecute el detector de bordes de Canny, invertir los valores, y luego Hago la transformación de distancia. Pero la imagen transformada se ve exactamente igual que la imagen de entrada. ¿Qué pasa?
Gracias!
no creo que es una buena idea usar un filtro de mediana antes de la detección de bordes: filtro de Gauss sería mucho mejor, ya que doesn' Presente cualquier artefacto, etc. – BIOStheZerg