前言:
看了很多大神的建议说:多写写博客可以提升技术。最近刚好有个用边学的 opencv 解决生活问题的小应用,就用它来完成我的 第一篇博客。苦恼于学校打印店人太多、排队时间太长 ,我就忍痛买了个低配打印机自己打打资料打打作业(不得不说这个打印机买的还是很值的)。但是呢我发现如果打印用手机拍的图片会受到光线的影响,出现背景阴影过重。
刚好在学 opencv ,想到用 canny 边缘检测提取文字过滤背景,可以让打印出的文件变得更加清爽。就试试啦
源码附上:
#include <iostream>
#include <vector>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <cmath>
int main()
{
// Read input image
cv::Mat image = cv::imread("D:IMG_215538.jpg", 0);
if (!image.data)
return 0;
// image is resize for book printing
cv::resize(image, image, cv::Size(), 0.6, 0.6);
// Display the image
cv::namedWindow("Original Image");
cv::imshow("Original Image", image);
// Apply Canny algorithm
cv::Mat contours;
cv::Canny(image, contours, 50, 50);
// Display the image of contours
cv::namedWindow("Canny Contours");
cv::imshow("Canny Contours", 255 - contours);
std::vector<cv::Mat> imageChannels;
cv::split(255 - contours, imageChannels);
cv::imwrite("D:3.jpg", imageChannels[0]);
cv::waitKey();
return 0;
}
手机拍摄图片:
程序处理过后的图片:
处理前后图片打印对比(后有灰色背景的为未处理的图片打印版)