首先先去opencv官网下载资源
官网地址:Releases - OpenCV
官网下载慢可以选择在百度网盘下载,版本是455
链接:https://pan.baidu.com/s/1LADtih8l8nStKwJRIde91Q
提取码:wx0h
提示:以下方法只适用于小角度倾斜,90度这种无法矫正!!!
下载之后解压,\opencv\build\java下有个jar包,需要导入到ide中,该目录下还有x64和x86两个文件夹,是opencv的动态库,根据自己电脑来选择使用,opencv的接口都在动态库里,很重要!
导入jar包,引入opencv的动态库
后续会用到PngEncoder,需要导入包
<!-- png图片处理 -->
<dependency>
<groupId>com.pngencoder</groupId>
<artifactId>pngencoder</artifactId>
<version>0.9.0</version>
</dependency>
后面就是具体的代码开发,第一个方法是用opencv的霍夫检测算法计算倾斜角度并旋转,但是因为修改后图片比原图大了十几倍,放弃了,知道的大佬可以指导下怎么在不改变图片的分辨率和清晰度缩小图片。
public static void first () {
try {
//输入图片路径
String srcPath = "D:\\TU\\x7.png";
//输出图片路径
String rotatePath = "D:\\TU\\rotate.png";
//加载opencv动态库,必要
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
//输入图片
Mat src = Imgcodecs.imread(srcPath);
//灰度化
Mat gray = new Mat();
if (src.channels() == 3) {
Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);
src = gray;
} else {
System.out.println("不是RGB图片!");
}
//边缘算法检测
Mat cannyMat = src.clone();
//表示迟滞过程的第一个阈值
double threshold1 = 60;
//表示迟滞过程的第二个阈值,通常把第一个阈值*2或*3
double threshold2 = threshold1 * 3;
Imgproc.Canny(src, cannyMat, threshold1, threshold2);
//计算倾斜角度
double angle =