Tôi đang thực hiện một số công việc phát hiện bằng cách sử dụng OpenCV và tôi cần sử dụng phép biến đổi khoảng cách. Ngoại trừ chức năng biến đổi khoảng cách trong opencv mang lại cho tôi một hình ảnh chính xác giống như hình ảnh tôi sử dụng làm nguồn. Có ai biết tôi đang làm gì sai không? Dưới đây là phần mã của tôi:Biến đổi khoảng cách OpenCV xuất ra một hình ảnh trông giống hệt hình ảnh đầu vào
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);
Tóm lại, tôi grad hình ảnh từ Kinect, biến nó thành một hình ảnh một kênh, mịn nó, chạy các máy dò cạnh khôn ngoan, đảo ngược các giá trị, và sau đó Tôi làm biến đổi khoảng cách. Nhưng hình ảnh được chuyển đổi trông giống hệt như hình ảnh đầu vào. Chuyện gì vậy?
Cảm ơn!
Tôi không nghĩ đó là một ý tưởng tốt để sử dụng một bộ lọc trung bình trước khi phát hiện cạnh: bộ lọc Gaussian sẽ tốt hơn vì nó doesn' t giới thiệu bất kỳ đồ tạo tác nào vv. – BIOStheZerg