java opencv 获取视频变换矩阵

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;
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值