汉字骨架线提取源码
时间: 2023-07-29 12:06:06 浏览: 49
以下是一个基于距离变换的汉字骨架线提取的C++源码示例,供参考:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
// 骨架提取函数
void SkeletonExtraction(Mat& src, Mat& dst)
{
Mat skel(src.size(), CV_8UC1, Scalar(0));
Mat temp(src.size(), CV_8UC1);
// 二值化
threshold(src, src, 0, 255, THRESH_BINARY_INV | THRESH_OTSU);
// 距离变换
distanceTransform(src, temp, DIST_L2, 3);
// 骨架提取
double max_val;
minMaxLoc(temp, NULL, &max_val);
for (int i = 0; i < src.rows; i++)
{
for (int j = 0; j < src.cols; j++)
{
if (temp.at<float>(i, j) == max_val)
{
skel.at<uchar>(i, j) = 255;
}
}
}
// 显示结果
dst = skel;
}
int main()
{
// 读取图像
Mat src = imread("chinese-character.jpg");
if (src.empty())
{
return -1;
}
// 骨架提取
Mat skel;
SkeletonExtraction(src, skel);
// 显示结果
imshow("Original Image", src);
imshow("Skeleton Image", skel);
waitKey();
return 0;
}
```
该示例中使用了OpenCV库中的距离变换函数和二值化函数,通过对输入图像进行二值化处理,然后计算距离变换,得到每个像素点到最近的边缘像素点的距离,最后通过取距离变换图像中的最大值,得到汉字的骨架线,将结果显示出来。需要注意的是,该示例中使用的是L2范数,如果需要使用L1范数,需要将DIST_L2改为DIST_L1。