a) 概念: 图点1,2,3与图点1,2、3对应,利用这2组对应点求出两者的变换矩阵,然后把它应用到整幅图像; b) 3点构成一个面; 仿射变换的变换矩阵大小为 2*3: c) 主要函数
- Imgproc.getAffinelransform(MatOfPoint2f src, MatOfPoint2f dst); //23 的变换妇
- ImgprocwarpAfine(Mat src,Mat dst, Mat M, Size dsizc); //用变换阵变换图像 -示例图
变换图
import org.opencv.core.*;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class WrapofflineChangePoint {
static {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
public static void main(String[] args) {
// 读取图像-->旋转
Mat imread = Imgcodecs.imread(
"D:\Users\WorkWaiting\HelloOpenCv\res" +
"\factory_ic_mould_assembling.png");
HighGui.imshow("factory_ic_mould_assembling",imread);
HighGui.waitKey(0);
//定义两个变换的矩阵点
Point[] points1 = new Point[3];
points1[0] = new Point(0,0);
points1[1] = new Point(140,0);
points1[2] = new Point(0,140);
Point[] points2 = new Point[3];
points2[0] = new Point(0,0);
points2[1] = new Point(140,0);
points2[2] = new Point(75,140);
// 变换点->面
MatOfPoint2f matOfPoint2f1 = new MatOfPoint2f(points1);
MatOfPoint2f matOfPoint2f2 = new MatOfPoint2f(points2);
// 变换三角形图像
Mat dst = new Mat();
Mat affineTransform = Imgproc.getAffineTransform(matOfPoint2f1, matOfPoint2f2);
Imgproc.warpAffine(imread, dst, affineTransform, imread.size());
//显示图像 按键盘Enter键进行切换旋转图像
HighGui.imshow("factory_ic_mould_assembling", dst);
//退出图像显示程序0
HighGui.waitKey(0);
System.out.println("OK-->END Windows");
}
}