opencv本身有二维码识别功能,但是识别效果不是很好,它对二维码图片要求较高,虽然可以有图片处理,甚至抠出二维码区域,但是整体识别与微信二维码识别功能还是有差距的。
微信二维码识别,采用了机器学习算法,加入了CNN模型的概念,它作为三方库,开源给了opencv,而且支持java语言,不过要使用,需要结合操作系统做编译,需要下载opencv源码,还需要下载opencv_contrib代码,这里面就是一些三方库,微信二维码就在这里面。
源码编译需要生成opencv_java45x.dll,opencv-java45x.so,opencv_java45x.jar等文件,不仅需要动态库,还需要jar包。
在windows系统下,动态库是dll类型,在linux下动态库就是so类型。如果你能下载到opencv-4.x版本的jar,dll,so文件,可以直接使用,如果没有,就需要手动编译(编译过程非常复杂,建议不要轻易尝试)。
有了jar,动态库,就很方便了,无需很复杂的设置,做过java开发的肯定知道jar需要加入类路径下,动态库只需要指定一个位置,java能像读文件一样加载到就可以了。
这里以windows系统为例,所需的文件就是opencv-453.jar和opencv_java453.dll动态库,如果是maven项目,我们可以将opencv-453.jar作为本地jar加入项目中。
<dependency>
<groupId>org</groupId>
<artifactId>opencv</artifactId>
<version>453</version>
<scope>system</scope>
<systemPath>${project.basedir}\src\main\resources\opencvlib\opencv-453.jar</systemPath>
</dependency>
java代码如下:
package org.example;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.wechat_qrcode.WeChatQRCode;
import javax.imagei