使用JavaCV计算单应性的CvPoint2D32f到cvMat的列表
使用JavaCV。我在ArrayList中有两组CvPoint2D32f点,一组来自移动电话的图像caputer,另一组来自恒定的已知图像源 我想应用使用JavaCV计算单应性的CvPoint2D32f到cvMat的列表,java,opencv,javacv,Java,Opencv,Javacv,使用JavaCV。我在ArrayList中有两组CvPoint2D32f点,一组来自移动电话的图像caputer,另一组来自恒定的已知图像源 我想应用cvfindhomogrphy()方法,使用这些点来查找点之间的单应矩阵。我正在使用以下代码尝试执行此操作,但我一直在思考如何从我知道的点到2cvMat,这是cvFindHomogrpahy()方法所采用的参数: matsrc = cvCreateMat(points.size(), 2, CV_32FC1); matdst = cvCreateM
cvfindhomogrphy()
方法,使用这些点来查找点之间的单应矩阵。我正在使用以下代码尝试执行此操作,但我一直在思考如何从我知道的点到2cvMat
,这是cvFindHomogrpahy()
方法所采用的参数:
matsrc = cvCreateMat(points.size(), 2, CV_32FC1);
matdst = cvCreateMat(known.size(), 2, CV_32FC1);
for(int s=0; s < points.size(); s++){
CvPoint2D32f p = (CvPoint2D32f)points.get(i).get("Point");
//Add this point to matsrc
}
for(int s=0; s < known.size(); s++){
CvPoint2D32f p = (CvPoint2D32f)known.get(i).get("Point");
//Add this point to matdst
}
CvMat mat = cvCreateMat(3, 3, CV_32FC1);
cvFindHomography(matsrc, matdst, mat); //Here the matrices created are used to find the 3x3 Homography transform Matrix
matsrc=cvCreateMat(points.size(),2,CV_32FC1);
matdst=cvCreateMat(已知的.size(),2,CV_32FC1);
对于(int s=0;s
我是不是走错了路 简而言之,您可以使用CvMat的put方法 以下是对代码进行一些修改后的完整解决方案:
import java.io.*;
import java.util.*;
import static com.googlecode.javacv.cpp.opencv_core.*;
import static com.googlecode.javacv.cpp.opencv_imgproc.*;
import static com.googlecode.javacv.cpp.opencv_highgui.*;
import static com.googlecode.javacv.cpp.opencv_calib3d.*;
/**
*
* @author rics
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
List<CvPoint2D32f> points = new ArrayList<CvPoint2D32f>();
List<CvPoint2D32f> known = new ArrayList<CvPoint2D32f>();
// points and known should be filled with valid values
// here are just some ad-hoc numbers that do not result a singular (unsolvable) configuration
for(int i=0; i < 2; i++){
points.add(cvPoint2D32f((double)i,10 - 2* (double)i));
known.add(cvPoint2D32f((double)i,10 - 2*(double)i));
}
for(int i=2; i < 5; i++){
points.add(cvPoint2D32f((double)i,(double)i));
known.add(cvPoint2D32f((double)i,(double)i));
}
CvMat matsrc = cvCreateMat(points.size(), 2, CV_32FC1);
CvMat matdst = cvCreateMat(known.size(), 2, CV_32FC1);
// filling the matrices with the point coordinates
for(int s=0; s < points.size(); s++){
CvPoint2D32f p = points.get(s);//.get("Point");
//Add this point to matsrc
matsrc.put(s,0,p.x());
matsrc.put(s,1,p.y());
}
for(int s=0; s < known.size(); s++){
CvPoint2D32f p = known.get(s);//.get("Point");
//Add this point to matdst
matdst.put(s,0,p.x());
matdst.put(s,1,p.y());
}
CvMat mat = cvCreateMat(3, 3, CV_32FC1);
cvFindHomography(matsrc, matdst, mat); //Here the matrices created are used to find the 3x3 Homography transform Matrix
// displaying the resulting matrix
for( int i = 0; i < 3; ++i) {
for( int j = 0; j < 3; ++j) {
System.out.print(mat.get(i,j) + ",");
}
System.out.println();
}
}
}
简而言之,您可以使用CvMat的put方法 以下是对代码进行一些修改后的完整解决方案:
import java.io.*;
import java.util.*;
import static com.googlecode.javacv.cpp.opencv_core.*;
import static com.googlecode.javacv.cpp.opencv_imgproc.*;
import static com.googlecode.javacv.cpp.opencv_highgui.*;
import static com.googlecode.javacv.cpp.opencv_calib3d.*;
/**
*
* @author rics
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
List<CvPoint2D32f> points = new ArrayList<CvPoint2D32f>();
List<CvPoint2D32f> known = new ArrayList<CvPoint2D32f>();
// points and known should be filled with valid values
// here are just some ad-hoc numbers that do not result a singular (unsolvable) configuration
for(int i=0; i < 2; i++){
points.add(cvPoint2D32f((double)i,10 - 2* (double)i));
known.add(cvPoint2D32f((double)i,10 - 2*(double)i));
}
for(int i=2; i < 5; i++){
points.add(cvPoint2D32f((double)i,(double)i));
known.add(cvPoint2D32f((double)i,(double)i));
}
CvMat matsrc = cvCreateMat(points.size(), 2, CV_32FC1);
CvMat matdst = cvCreateMat(known.size(), 2, CV_32FC1);
// filling the matrices with the point coordinates
for(int s=0; s < points.size(); s++){
CvPoint2D32f p = points.get(s);//.get("Point");
//Add this point to matsrc
matsrc.put(s,0,p.x());
matsrc.put(s,1,p.y());
}
for(int s=0; s < known.size(); s++){
CvPoint2D32f p = known.get(s);//.get("Point");
//Add this point to matdst
matdst.put(s,0,p.x());
matdst.put(s,1,p.y());
}
CvMat mat = cvCreateMat(3, 3, CV_32FC1);
cvFindHomography(matsrc, matdst, mat); //Here the matrices created are used to find the 3x3 Homography transform Matrix
// displaying the resulting matrix
for( int i = 0; i < 3; ++i) {
for( int j = 0; j < 3; ++j) {
System.out.print(mat.get(i,j) + ",");
}
System.out.println();
}
}
}