下载OpenCV SDK (V3.0), 在VC2010工程里添加所需头文件和库文件,不会添加和设置,可参考另一个经验。在工程源文件中添加头文件和库文件引用:#include
准备书法作品一份,下图为笔者拙作,调用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);可显示如下原图。
调用cvtColor 转换图形格式为灰度图Mat gray; cv::cvtColor(resized,gray,CV_BGR2GRAY);
调用threshold 对灰度图进行二值化处理。Mat mask; const int EDGES_THRESHOLD=60; threshold(gray,mask,EDGES_THRESHOLD,255,THRESH_BINARY_INV);处理后的图片如同碑刻,临碑书写的朋友们可以比较一下自己与原帖的差别。
如果不喜欢黑底白字,可以换个颜色的背景,这里用到了图像融合算法。将二值化的图片反色, 创建黄色背景,融合两幅图像,这样,黄底黑字的效果就出来了。cv::bitwise_not(mask,mask); cv::Mat result(gray.rows,gray.cols,CV_8UC3,cv::Scalar(0,192,255)); result.copyTo(resized,mask);
上面示意了浅黄色米格纸示意的效果,再示意一张无格毛边纸处理效果。虽然有些阴影影响处理效果,但是效果也达到要求了。
如果毛笔字有毛刺,可以人为修饰一下,调用medianBlur或blur可以对毛笔字作平滑处理,这样看起来更好