JAVA 识别图片中二维码 opencv 识别精准
提示:以下是本篇文章正文内容,下面案例可供参考
前言:之前识别图片使用的是
后发现该方法识别图中的二维码不精准 经常识别不到二维码内容 总要想办法处理图片后识别
常用识别方法 图片转色调 旋转90度 还是会有个别识别不了的二维码 故 换成openCv 图片无自身问题情况下识别精准 代码奉上
一、添加依赖
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacpp</artifactId>
<version>1.5.7</version>
<classifier>windows-x86_64</classifier>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>openblas</artifactId>
<version>0.3.19-1.5.7</version>
<classifier>windows-x86_64</classifier>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>opencv</artifactId>
<version>4.5.5-1.5.7</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>opencv</artifactId>
<version>4.5.5-1.5.7</version>
<classifier>windows-x86_64</classifier>
</dependency>
二、依赖配置
需要注意pom中的opencv引用中的分类 在windows环境下改为weindows linux下改为linux
三、测试类
package com.ehs.antiepidemic.utils;
import org.bytedeco.opencv.opencv_core.Mat;
import org.bytedeco.opencv.opencv_core.StringVector;
import org.bytedeco.opencv.opencv_wechat_qrcode.WeChatQRCode;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import static org.bytedeco.opencv.global.opencv_imgcodecs.imread;
/**
* @author ChenYi
*/
public class WeChatDeCode {
public static void main(String... args) {
openPic();
}
private static String openPic() {
Mat img = imread("D:\\testImg\\15.jpg");
return deCode(img);
}
public static String deCode(Mat img) {
//微信二维码对象,要返回二维码坐标前2个参数必传;后2个在二维码小或不清晰时必传。
WeChatQRCode we = new WeChatQRCode();
List<Mat> points = new ArrayList<Mat>();
//微信二维码引擎解码,返回的valList中存放的是解码后的数据,points中Mat存放的是二维码4个角的坐标
StringVector stringVector = we.detectAndDecode(img);
System.out.println(stringVector.get(0).getString(StandardCharsets.UTF_8));
return stringVector.get(0).getString(StandardCharsets.UTF_8);
}
}
四、结果
二维码识别精准