在棋盘上绘制3D方框-OpenCV、LibGdx和java
我是opencv的新手。我在java中工作,这是一个痛苦的事情,因为互联网上的大多数例子和资源都是C++的。 目前,我的项目涉及识别棋盘,然后能够在棋盘的特定部分进行绘制 我已经通过图书馆的Calib3d部分找到了角落。但这就是我被卡住的地方。我的问题是如何将我获得的角点信息(即2D图像上的角点位置)转换为可以在3D空间中使用LibGdx绘制的信息 以下是我的代码(以片段形式):在棋盘上绘制3D方框-OpenCV、LibGdx和java,java,opencv,libgdx,computer-vision,augmented-reality,Java,Opencv,Libgdx,Computer Vision,Augmented Reality,我是opencv的新手。我在java中工作,这是一个痛苦的事情,因为互联网上的大多数例子和资源都是C++的。 目前,我的项目涉及识别棋盘,然后能够在棋盘的特定部分进行绘制 我已经通过图书馆的Calib3d部分找到了角落。但这就是我被卡住的地方。我的问题是如何将我获得的角点信息(即2D图像上的角点位置)转换为可以在3D空间中使用LibGdx绘制的信息 以下是我的代码(以片段形式): 公共类棋盘抽屉实现ApplicationListner{ …//字段在这里 MatOfPoint2f角点=新的Mat
公共类棋盘抽屉实现ApplicationListner{
…//字段在这里
MatOfPoint2f角点=新的MatOfPoint2f();
MatOfPoint3f objectPoints=新的MatOfPoint3f();
公共void create(){
网络摄像头=新的视频捕获(0);
…//程序休眠以确保相机已准备就绪
}
公共无效呈现(){
//获取网络摄像头图像
网络摄像头读取(网络摄像头图像);
//对图像进行灰度处理
Imgproc.cvtColor(网络视频图像、灰度图像、Imgproc.COLOR\u bgr2灰度);
//检查图像是否包含具有9x6角的棋盘
布尔foundCorners=Calib3d.findChessboardCorners(灰色图像,
新尺寸(9,6),
角点,Calib3d.CALIB_CB_FAST_CHECK(Calib3d.Calibu CB_ADAPTIVE_THRESH);
如果(四角){
对于(int i=0;i
有什么帮助吗
OpenCV中当前的实现可能无法满足您的精度要求(至少对于单目相机而言)。良好的AR体验需要良好的准确性
objPoints
,使用比例和初始方向绘制3D素材
你可以按照这个来做祝你好运
public class chessboardDrawer implements ApplicationListner{
... //Fields are here
MatOfPoint2f corners = new MatOfPoint2f();
MatOfPoint3f objectPoints = new MatOfPoint3f();
public void create(){
webcam = new VideoCapture(0);
... //Program sleeps to make sure camera is ready
}
public void render(){
//Fetch webcam image
webcam.read(webcamImage);
//Grayscale the image
Imgproc.cvtColor(webcamImage, greyImage, Imgproc.COLOR_BGR2GRAY);
//Check if image contains a chessboard of with 9x6 corners
boolean foundCorners = Calib3d.findChessboardCorners(greyImage,
new Size(9,6),
corners, Calib3d.CALIB_CB_FAST_CHECK | Calib3d.CALIB_CB_ADAPTIVE_THRESH);
if(foundCorners){
for(int i = 0; i < corners.height; i++){
//This is where i have to convert the corners
//to something i can use in libGdx to draw boxes
//And insert them into the objectPoints variable
}
}
//Show the corners on the webcamIamge
Calib3d.drawChessboardCorners(webcamImage, new Size(9,6), corners, true);
//Helper library to show the webcamImage
UtilAR.imDrawBackground(webcamImage);
}
}