Example #1
0
//骨架化
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;

}