本文共 2015 字,大约阅读时间需要 6 分钟。
功能介绍
本项目主要包含证件扫描和文字纠正两个核心功能,软件界面简洁直观,用户可以通过菜单栏选择需要处理的图片文件。以下是主要功能的列表:项目实现
UI设计
文字纠正
核心代码
证件扫描
Mat scanning() { Mat src = imread(path); Mat source = src.clone(); Mat bkup = src.clone(); Mat img = src.clone(); threshold(img, img, GRAY_THRESH, 255, CV_THRESH_BINARY); GaussianBlur(img, img, Size(5, 5), 0, 0); Mat element = getStructuringElement(MORPH_RECT, Size(3, 3)); dilate(img, img, element); Canny(img, img, 30, 120, 3); vectorcontours; vector RaisePropertyChanged++}
文字纠正
Mat rotate(Mat srcImage) { // 转换为灰度图 Mat grayImage; cvtColor(srcImage, grayImage, CV_RGB2GRAY); // 获取图片原尺寸 const int nRows = grayImage.row; const int nCols = grayImage.col; // 图像DFT变换 int mRows = getOptimalDFTSize(nRows); int mCols = getOptimalDFTSize(nCols); Mat newImage; copyMakeBorder(grayImage, newImage, 0, mRows - nRows, 0, mCols - nCols, BORDER_CONSTANT, Scalar::all(0)); Mat groupImage[] = {Mat_c-gray, Mat_c-gray}; merge(groupImage, mergeImage); dft(mergeImage, mergeImage); split(mergeImage, groupImage); magnitude(groupImage[0], groupImage[1], groupImage[0]); magImage = Scalar::all(1); log(magImage, magImage); // 获得图像中心点 int cx = magImage.cols / 2; int cy = magImage.rows / 2; // 交换象限 Mat LT, RT, LB, RB; // 绘制纠正后的图像 warpAffine(srcImage, resultImage, rotateMat, srcImage.size(), 1, 0, Scalar(255, 255, 255)); return resultImage;}
项目截图
项目总结
转载地址:http://ziiwk.baihongyu.com/