本文欢迎转载,转载请注明出处:
https://my.oschina.net/227/blog/796485
前言
在开发项目中,有的时候需要用户上传照片到后台服务器审核,如果照片不清晰的话,那就得用户重新上传。有没有办法在上传之前就判断照片是否清晰呢?为了解决这个问题,我们可以用到一个图像处理框架“openCV”。"openCV"非常强大,我们这里只是用了它的很小一点点。
openCV官网:http://opencv.org/
思路:
如果读者了解信号处理,就会知道最直接的方法就是计算图片的快速傅里叶变换,然后查看高低频的分布。如果图片有少量的高频成分,那么该图片就可以被认为是模糊的。然而,区分高频量多少的具体阈值却是十分困难的,不恰当的阈值将会导致极差的结果。
查阅了相关资料,了解到了目前比较好的方法是“拉普拉斯方差算法”。
简单来说就是只需要将图片中的某一通道(一般用灰度值)用的拉普拉斯掩模做卷积运算,得到的像素矩阵,在把矩阵中的数值求方差。如果图像越清晰,边缘越锐利,像素之间的差别越大,则方差越大。反之图像模糊,边缘之间像素差别小,那方差越小。
步骤一:
去openCV官网下载给iOS用的“opencv2.framework”包,并导入xcode工程中
地址: (输入浏览器回车后过几秒钟就会自动下载)
https://sourceforge.net/projects/opencvlibrary/files/opencv-ios/2.4.13/opencv2.framework.zip/download
步骤二:
在需要使用的地方添加头文件“#import <opencv2/opencv.hpp>”,并且把当前的“.m”的objective-c文件改成“.m