王兵 2 years ago
parent 75813a7739
commit 8db1ea7b3e

@ -7,8 +7,6 @@ import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.RotatedRect;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
@ -139,21 +137,22 @@ public class Test extends DllLoad {
Imgproc.line(src, point[2], point[3], new Scalar(0, 0, 255));
Imgproc.line(src, point[3], point[0], new Scalar(0, 0, 255));
Mat dst = new Mat(src,rotatedRect.boundingRect());
Mat dst = new Mat(src, rotatedRect.boundingRect());
show(dst);
Mat dst2 = new Mat(dst.size(), dst.type());
//旋转中心点
Point cp = new Point(src.width() / 2, src.height() / 2);
Point cp = new Point(dst.width() / 2, dst.height() / 2);
System.out.println(rotatedRect.angle);
//旋转角度
int angle = 45;
double angle = rotatedRect.angle - 90;
//缩放系数
int scale = 1;
//获取变换矩阵
Mat matrix2D = Imgproc.getRotationMatrix2D(cp, angle, scale);
Imgproc.warpAffine(dst,dst2,matrix2D,dst2.size(),Imgproc.INTER_NEAREST);
Imgproc.warpAffine(dst, dst2, matrix2D, dst2.size(), Imgproc.INTER_NEAREST);
// show(dst2);
show(dst2);
// Mat mat = new Mat();
// Imgproc.Sobel(src, mat, -1, 0, 1);
@ -170,7 +169,8 @@ public class Test extends DllLoad {
// Imgproc.drawContours(src, matOfPoints, -1, new Scalar(0, 255, 0), 1, Imgproc.LINE_AA);
}
show(src);
// show(src);
System.exit(0);
//
// // 创建输出单通道图像
// Mat grayImage = new Mat(src.rows(), src.cols(), CvType.CV_8SC1);

@ -0,0 +1,25 @@
package base;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import java.io.File;
/**
*
*/
public class ImageGray extends DllLoad {
public static void main(String[] args) {
File file = new File("imgs/3.png");
Mat src = Imgcodecs.imread(file.getAbsolutePath());
Mat dst = new Mat();
//图片灰度化 https://blog.csdn.net/ren365880/article/details/103869207
Imgproc.cvtColor(src, dst, Imgproc.COLOR_BGR2GRAY);
show(dst);
System.exit(0);
}
}

@ -0,0 +1,46 @@
package base;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import java.io.File;
/**
*
*/
public class ImageThreshold extends DllLoad {
public static void main(String[] args) {
File file = new File("imgs/1.png");
Mat src = Imgcodecs.imread(file.getAbsolutePath());
Mat gray = new Mat();
//图片灰度化
Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);
{// 全局二值化 - 适应OTSU算法实
//一般,我们不知道用什么阈值可以获得更好的二值化图像.OTSU会通过一系列计算,计算出,比较优的阈值(可以理解为,在
//图像直方图中,如果存在两峰,那么,我们的阈值应该尽可能的在两峰之间的峰谷).因此,对于非双峰图,用这种方法可能效果
//不太理想,OTSU是计算二值化的算法,计算二值化的算法有很多,一般使用OTSU
Mat dst = new Mat();
Imgproc.threshold(gray, dst, 0, 255, Imgproc.THRESH_BINARY | Imgproc.THRESH_OTSU);
show(dst);
}
{// 全局二值化 - 不适应OTSU算法实
// 这里指定127为阔值127以下转为黑色127以上转为255(白)色
Mat dst2 = new Mat();
Imgproc.threshold(gray, dst2, 127, 255, Imgproc.THRESH_BINARY);
show(dst2);
}
{// 局部二值化
Mat dst = new Mat();
Imgproc.adaptiveThreshold(gray,dst,255,Imgproc.ADAPTIVE_THRESH_MEAN_C,Imgproc.THRESH_BINARY,11,2);
show(dst);
}
System.exit(0);
}
}
Loading…
Cancel
Save

Powered by TurnKey Linux.