技术标签: 其他
在之前程序的基础上再添加一个Button和TextView,点击“识别”按钮检测照片中的ArUco码后,在屏幕最下方显示识别到的ArUco的id和四个角点坐标,四个角点从左上角点开始顺时针计数。
还有些地方没有完善,不知道为什么识别过后颜色会变。因为还没有做校准、相机标定,所以红色的Z轴指向不正确。
private void detectArUco() {
Mat src = Imgcodecs.imread(imagePath); //相册选的图
Mat gray = new Mat();
Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGRA2GRAY); //灰度处理
Dictionary dictionary = Aruco.getPredefinedDictionary(Aruco.DICT_4X4_50);
List<Mat> corners = new LinkedList<>();
corners.clear();
MatOfInt ids = new MatOfInt();
DetectorParameters parameters;
parameters = DetectorParameters.create();
Aruco.detectMarkers(gray, dictionary, corners, ids, parameters);
if (corners.size() > 0) {
double[] id = ids.get(0, 0);
double id0 = id[0];
String sid0 = Double.toString(id0);
Mat corner1 = corners.get(0);
double a[] = corner1.get(0,0);
double a0 = a[0];
double a1 = a[1];
String sa0 = Double.toString(a0);
String sa1 = Double.toString(a1);
double b[] = corner1.get(0, 1);
double b0 = b[0];
double b1 = b[1];
String sb0 = Double.toString(b0);
String sb1 = Double.toString(b1);
double c[] = corner1.get(0, 2);
double c0 = c[0];
double c1 = c[1];
String sc0 = Double.toString(c0);
String sc1 = Double.toString(c1);
double d[] = corner1.get(0, 3);
double d0 = d[0];
double d1 = d[1];
String sd0 = Double.toString(d0);
String sd1 = Double.toString(d1);
tv.setText(sid0 + "\n" + sa0 + ", " + sa1 + "\n" + sb0 + ", " + sb1 + "\n" + sc0 + ", " + sc1 + "\n" + sd0 + ", " + sd1 );
Aruco.drawDetectedMarkers(src, corners, ids);
Mat rvecs=new Mat();
Mat tvecs=new Mat();
Mat cameraMatrix = new Mat();
Mat distCoeffs = new Mat();
cameraMatrix = Mat.eye(3,3, CvType.CV_64FC1);
distCoeffs = Mat.zeros(5,1,CvType.CV_64FC1);
Aruco.estimatePoseSingleMarkers(corners, 0.04f, cameraMatrix, distCoeffs, rvecs, tvecs);
for(int i=0;i<ids.toArray().length;i++){
Aruco.drawAxis(src, cameraMatrix, distCoeffs, rvecs.row(i), tvecs.row(i), 0.02f);
}
}
Bitmap bp1 = BitmapFactory.decodeFile(imagePath);
Utils.matToBitmap(src, bp1);
ImageView iv = this.findViewById(R.id.sample_img);
iv.setImageBitmap(bp1);
gray.release();
src.release();
}
前言 2019年12月到 2020年04月,小编参与到公司项目与第三方OA的对接,即华为云WeLink市场的对接工作,华为云市场、WeLink市场两部分对接工作,我负责华为云市场项目对接接口、另一个同事负责WeLink对接。主要经历了四个阶段:熟悉第三方文档需求及相关业务、研发、测试、上线并解决问题。主要工作 第三方接口调用、开通第三方租户(租户包括本项目、第三方)第三方接口调用一、准备工作熟悉整体业务流程图项目分
今天介绍一下IDEA的一些炫酷的插件,IDEA强大的插件库,不仅能给我们带来一些开发的便捷,还能体现我们的与众不同。1.插件的安装打开setting文件选择Plugins选项Ctrl + Alt + S File -> Setting分别是安装JetBrains插件,第三方插件,本地已下载的插件包。详情见往期关于settings的文章。2.各种插件#1. a...
坑点:1. pyinstaller 不支持3.8以上打包exe2. pyinstaller 打包exe 后标
VR全景是基于全景图像的真实的场景的虚拟现实技术,是VR虚拟现实技术中非常重要的一部分。全景其实就是把摄像设备换360°拍摄的一组或者是多组照片拼接成一个完整的全景图像,然后在利用计算机技术实现全方位互动式观看的真实场景的展示方式。VR全景具有以下几个优点:真实性 完整性 高精度 高效性因此在我们需要最真实、全面、直观的再现一个场景时候,VR全景是你最好的选择。VR全景的视角超过了人的正常视角范围,我们这里说的全景指的是水平视角360°,垂直的视角是180°的全景图像。它具有以下几个特征
QT学习 之 对话框 (五) QGroupBox类
spi flash修改设备树arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dts将原来的&spi0{…}替换为: &spi0 { pinctrl-names = "default"; pinctrl-0 = <&spi0_pins_a>; status = "okay"; spi-max-frequency = <50000000>; flash: w2
在darknet版本的yolov3中,我们要将每张图片对应的XML文件转换为一个txt文件,包含边框的信息:import xml.etree.ElementTree as ETimport ossets = [('2012', 'train'), ('2012', 'val'), ('2007', 'train'), ('2007', 'val'), ('2007', 'test')]...
作者|方曦(千之)出品|阿里巴巴新零售淘系技术部一句话概括全文:现在,商家应用支持 AR 效果了!AR 是什么?是一种现实增强技术(Augmented Reality),可以将虚拟效果...
一、首先是贝叶斯 参考机器学习(一) —— 浅谈贝叶斯和MCMC其中π指的是参数的概率分布,π(θ)π(θ)指的是先验概率,π(θ|x)指的是后验概率,f(x|θ)指的是我们观测到的样本的分布,也就是似然函数(likelihood),记住竖线|左边的才是我们需要的。其中积分求的区间Θ指的是参数θθ所有可能取到的值的域,所以可以看出后验概率π(θ|x)是在...
for循环练习题一、计算从1到100所有整数的和二、过滤出从1到100所有整数的奇偶数三、提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和四、求从1到100所有整数的偶数和、奇数和五、检测指定范围主机是否通信,并将通信的主机ip输出到文件host_ip中六、输出/dev目录中的所有可执行文件一、计算从1到100所有整数的和#!/bin/bashsum=0for ((i=1; i<=100; i++))do sum=$[sum+$i]doneecho $sum 二
代码结构图如下:客户端通过Spring的HttpInvoker,完成对远程函数的调用。涉及的类有:客户端调用User类的服务UserService,完成对实现类UserServiceImpl的addUser(User u)方法调用。其中User类为普通Pojo对象,UserService为接口,UserServiceImpl为UserService的具体实现。代码如下:publ...