//骨架化 void CImageProcess::Thinning(Image &source, Image &dst){ memset(dst._pData, 0, dst._height * dst._width); IplImage *tmp = CreateImage(source); IplImage *tmp_d = CreateImage(dst); cv::Mat src(tmp, 0); cv::Mat dst_t(tmp_d); dst_t = src.clone(); dst_t /= 255; // convert to binary image cv::Mat prev = cv::Mat::zeros(dst_t.size(), CV_8UC1); cv::Mat diff; do { ThinningIteration(dst_t, 0); ThinningIteration(dst_t, 1); cv::absdiff(dst_t, prev, diff); dst_t.copyTo(prev); } while (cv::countNonZero(diff) > 0); dst_t *= 255; IplImage tmp_(dst_t); IplImge2Image(&tmp_, dst); ReleaseUserImage(&tmp); ReleaseUserImage(&tmp_d); }
void LightplaneCalibrator::Thinning(const cv::Mat & src, cv::Mat & dst) { dst = src.clone(); dst /= 255; // convert to binary image cv::Mat prev = cv::Mat::zeros(dst.size(), CV_8UC1); cv::Mat diff; do { ThinningIteration(dst, 0); ThinningIteration(dst, 1); cv::absdiff(dst, prev, diff); dst.copyTo(prev); } while (cv::countNonZero(diff) > 0); dst *= 255; }