c++汉字骨架线提取源码
时间: 2023-08-25 17:07:16 浏览: 138
手写汉字骨架提取
5星 · 资源好评率100%
以下是一个基于边缘检测的汉字骨架线提取的C++源码示例,供参考:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
// 边缘检测函数
void CannyEdgeDetection(Mat& src, Mat& dst, int threshold1, int threshold2)
{
Mat src_gray;
cvtColor(src, src_gray, COLOR_BGR2GRAY);
blur(src_gray, src_gray, Size(3, 3));
Canny(src_gray, dst, threshold1, threshold2, 3, false);
}
// 骨架提取函数
void SkeletonExtraction(Mat& src, Mat& dst)
{
dst = Mat::zeros(src.size(), CV_8UC1);
Mat skel(src.size(), CV_8UC1, Scalar(0));
Mat temp;
Mat eroded;
Mat element = getStructuringElement(MORPH_CROSS, Size(3, 3));
bool done;
do
{
erode(src, eroded, element);
dilate(eroded, temp, element);
subtract(src, temp, temp);
bitwise_or(skel, temp, skel);
eroded.copyTo(src);
done = (countNonZero(src) == 0);
} while (!done);
dst = skel;
}
int main()
{
// 读取图像
Mat src = imread("chinese-character.jpg");
if (src.empty())
{
return -1;
}
// 边缘检测
Mat edge;
CannyEdgeDetection(src, edge, 50, 150);
// 骨架提取
Mat skel;
SkeletonExtraction(edge, skel);
// 显示结果
imshow("Original Image", src);
imshow("Edge Image", edge);
imshow("Skeleton Image", skel);
waitKey();
return 0;
}
```
该示例中使用了OpenCV库中的Canny边缘检测和骨架提取函数,通过对输入图像进行边缘检测,然后对边缘进行骨架提取,得到汉字的骨架线,最后将结果显示出来。需要注意的是,该示例中只适用于二值化图像,如果需要处理彩色图像,需要先将图像转换为灰度图像,并进行二值化处理。
阅读全文