package com.opencv;
import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;
/**
* opencv 工具类
*
* @author
*
* @since 2017年6月1日11:22:35
*
*/
public class Utils {
static{
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
/**
* 获取变换矩阵
* @return
*/
public static Mat getMatrix(){
Mat src_mat=new Mat(4,1,CvType.CV_32FC2);//第一帧四点位置坐标储存对象(4行1列32位2通道)
Mat dst_mat=new Mat(4,1,CvType.CV_32FC2);//第二帧四点位置坐标存储对象(4行1列32位2通道)
//int org.opencv.core.Mat.put(int row, int col, double... data)指定初始位置坐标,多出的数据自动下一行填充
src_mat.put(0,0,703.624573,432.514771,982.845703,432.499115,986.821472,588.753723,703.555298,589.566284);
dst_mat.put(0,0,703.44342,432.491852,982.675049,432.485107,986.639221,588.751526,703.371582,589.557251);
//Mat org.opencv.imgproc.Imgproc.getPerspectiveTransform(Mat src, Mat dst) 返回变化矩阵储存对象(3*3)
return Imgproc.getPerspectiveTransform(src_mat, dst_mat);
}
/**
* 根据上一帧四点坐标和变换矩阵 获取下一帧四点坐标
* @param src 上一帧四点坐标
* @param matrix 变换矩阵(3*3)
* @return 下一帧四点坐标字符串(json格式)
*/
public static String getCoordinate(Mat src, Mat matrix){
Mat dst=new Mat(4,1,CvType.CV_32FC2);
//任意知道两个参数,将会得到第三个参数的值并填充到第三个参数中
Core.perspectiveTransform(src, dst, matrix);
String coordinate = "{next:[";
for(int i=0;i<4;i++){
if(i<3){
coordinate += dst.get(i, 0)[0]+",";
coordinate += dst.get(i, 0)[1]+",";
}else{
coordinate += dst.get(i, 0)[0]+",";
coordinate += dst.get(i, 0)[1];
}
}
coordinate += "]}";
return coordinate;
}
}
java opencv 获取视频变换矩阵
最新推荐文章于 2024-04-12 13:23:01 发布