多语言展示
当前在线:266今日阅读:99今日分享:20

如何使用OpenCV图像库抠书法毛笔字

Photoshop有很强的图像处理能力,借助Photoshop的色彩识别或者通道,可以很容易的抠出宣纸上的毛笔字,但是目前写毛笔字的人多为老者,电脑操作能力差,会使用Photoshop的更是寥若晨星。本文借助OpenCV视觉库实现程序自动抠图,将来有时间写成更直观的工具供人使用。
方法/步骤
1

下载OpenCV SDK (V3.0), 在VC2010工程里添加所需头文件和库文件,不会添加和设置,可参考另一个经验。在工程源文件中添加头文件和库文件引用:#include #include #include #include #include #include  #pragma comment (lib,'opencv_core244d.lib')#pragma comment (lib,'opencv_highgui244d.lib')#pragma comment (lib,'opencv_imgproc244d.lib')using namespace std;using namespace cv;

2

准备书法作品一份,下图为笔者拙作,调用imread 加载图片。Mat src=imread(filename); if(!src.data) { fprintf(stderr,'error load image\n'); return -1; }由于原图较大,可使用resize调整图像大小,Mat resized; resize(src,resized,Size(src.cols/6,src.rows/6));此时如果使用namedWindow('Shufa'); imshow('Shufa',resized);可显示如下原图。

3

调用cvtColor 转换图形格式为灰度图Mat gray; cv::cvtColor(resized,gray,CV_BGR2GRAY);

4

调用threshold 对灰度图进行二值化处理。Mat mask; const int EDGES_THRESHOLD=60; threshold(gray,mask,EDGES_THRESHOLD,255,THRESH_BINARY_INV);处理后的图片如同碑刻,临碑书写的朋友们可以比较一下自己与原帖的差别。

5

如果不喜欢黑底白字,可以换个颜色的背景,这里用到了图像融合算法。将二值化的图片反色, 创建黄色背景,融合两幅图像,这样,黄底黑字的效果就出来了。cv::bitwise_not(mask,mask); cv::Mat result(gray.rows,gray.cols,CV_8UC3,cv::Scalar(0,192,255)); result.copyTo(resized,mask);

6

上面示意了浅黄色米格纸示意的效果,再示意一张无格毛边纸处理效果。虽然有些阴影影响处理效果,但是效果也达到要求了。

注意事项

如果毛笔字有毛刺,可以人为修饰一下,调用medianBlur或blur可以对毛笔字作平滑处理,这样看起来更好

推荐信息