Wykonuję niektóre prace wykrywające przy użyciu OpenCV, i potrzebuję użyć transformacji odległości. Poza tym funkcja przekształcania odległości w opencv daje mi obraz, który jest dokładnie taki sam jak obraz, którego używam jako źródła. Czy ktoś wie, co robię źle? Oto fragment mojego kodu:Transformacja odległości OpenCV wyprowadzająca obraz, który wygląda dokładnie tak jak obraz wejściowy
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);
W skrócie, to grad obraz z Kinect, przekształcić go w obrazie jednego kanału, wygładza ją, uruchom canny odwrócić wartości, a następnie Wykonuję transformację odległości. Jednak przekształcony obraz wygląda dokładnie tak samo, jak obraz wejściowy. Co jest nie tak?
Dzięki!
Nie sądzę, że to dobry pomysł, aby użyć mediana filtr przed wykrywania krawędzi: filtr Gaussian byłoby znacznie lepiej, ponieważ nie robi” t wprowadzić żadnych artefaktów itp. – BIOStheZerg