Ubuntu下利用Java CV获取双目摄像头图像

Ubuntu下利用Java CV获取双目摄像头图像

算法语言 9个月前 (03-06) 浏览: 292 评论: 0

毕业设计的项目是做一个通过双目摄像头测出物体的距离,然后控制模型车避开较近的障碍物,所以需要将安装在模型车上双目摄像头的图像传输,发送到电脑端进行双目测距算法的计算,然后电脑将计算的结果发送到小车,小车控制行驶方向从而避开障碍物。小车上使用Pcduino开发板,安装Ubuntu系统,外插Arduino扩展板,连接小车的硬件部分。 从淘宝上买回的双目摄像头后,使用java cv获取到双目摄像头图像的方式与单目摄像头的方式是类似的。不同的地方是要想分离双目摄像头的画面需要设置代码中的分辨率参数。 如果不对分辨率进行任何的设置,得到的效果是这样的: 双目摄像头画面 是不是似曾相识,我们在电影院看3D电影不戴眼镜看到的就是这样的。对于开发者来说两路图片混合在一起显然不是好事,需要在代码里做如下设置。 因为笔者手中的摄像头每一只分辨率为640480,所以将分辨率改成1280480,可以成功的将图片分离。 图片分离以后的效果是这样的: 双目摄像头图像分离 代码使用了java cv的库,如果是maven项目,需要这样配置依赖: 在pom.xml中project节点下添加: 更多的环境配置可以访问 java cv的官方Github主页。

【语言-java】1、”==”和”equal”的区别

【语言-java】1、”==”和”equal”的区别

技术 2年前 (2016-03-18) 浏览: 172 评论: 0

对于一些基本数据类型,int,long,bool,还有char!,“==”都是表示值相等的意思,没有equal方法。 equal方法是object对象里面的方法,java中String不是基本数据类型,而是一个类,它们都是继承object类,还有Integer和int的区别也是Integer是一个类! 在object类中,equal方法与“==”是等同的,“==”不是表示值相等,而是比较对象的地址是否相等!Integer和String都重写了(没错!就是重写,重载是写多个函数名相同但参数不同的函数;重写是对父类的方法重新定义,体现了多态性),equal方法经过String、Integer重写后,是比较值而非地址。

百度地图API位置偏移的校准算法

百度地图API位置偏移的校准算法

算法语言 软件开发 2年前 (2016-02-17) 浏览: 2761 评论: 0

在开始使用百度地图API进行开发时可能会遇到一件相当奇怪的事情,使用百度定位的经纬度在地图上显示相当不准确,这一问题我在微信开发和安卓开始时都遇到过。第一次使用百度地图api获取位置并在地图上显示是在微信开发的时候,那是不知道具体原因无奈在微信获取的地理位置上加了一个偏移量进行校准,虽能勉强解决,但是不太准确。后来在安卓开始也同样遇到了这个问题,才发现百度地图API定位偏移已经不是一个偶然问题了。 百度地图API定位偏移的原因 以下来自互联网: 一、坐标体系 首先我们要明白,开发者能接触到哪些坐标体系呢? 第一种分类: 1、 GPS,WGS-84,原始坐标体系。一般用国际标准的GPS记录仪记录下来的坐标,都是GPS的坐标。很可惜,在中国,任何一个地图产品都不允许使用GPS坐标,据说是为了保密。GPS坐标形式如图,度分秒形式的经纬度:   2、 GCJ-02,国测局02年发布的坐标体系。又称“火星坐标”。在中国,必须至少使用GCJ-02的坐标体系。比如谷歌,腾讯,高德都在用这个坐标体系。GCJ-02也是国内最广泛使用的坐标体系。 3、 其他坐标体系。一般都是由GCJ-02进过偏移算法得到的。这种体系就根据每个公司的不同,坐标体系都不一样了。比如,百度和搜狗就使用自己的坐标体系,与其他坐标体系不兼容。 第二种分类: 首先明白,所有坐标体系的原点,都是非洲。 1、 经纬度。这个是球面坐标,对于北京来说,就是(116.38817139.935961)这样的坐标。比如腾讯、高德、百度都是这样的经纬度坐标。谷歌是经纬度顺序写反的经纬度坐标。 如果是度分秒坐标,需要进行转换,才能得到这样的经纬度坐标。详见坐标转换。 2、 墨卡托坐标。平面坐标,相当于是直线距离,数字一般都比较大,像这样的。(215362.00021333335 99526.00034912192) 墨卡托坐标,主要用于程序的后台计算。直线距离嘛,加加减减几乎计算方便。 搜狗地图API就是直接使用的墨卡托坐标。 二、坐标转换 在各种web端平台,或者高德、腾讯、百度上取到的坐标,都不是GPS坐标,都是GCJ-02坐标,或者自己的偏移坐标系。 比如,你在谷歌地图API,高德地图API,腾讯地图API上取到的,都是GCJ-02坐标,他们三家都是通用的,也适用于大部分地图API产品,以及他们的地图产品。 例外,百度API上取到的,是BD-09坐标,只适用于百度地图相关产品。 例外,搜狗API上取到的,是搜狗坐标,只适用于搜狗地图相关产品。 例外,谷歌地球,google earth上取到的,是GPS坐标,而且是度分秒形式的经纬度坐标。在国内不允许使用。必须转换为GCJ-02坐标。 1、度分秒坐标转换为经纬度 比如,在GPS记录仪,或者google earth上采集到的是39°31'20.51,那么应该这样换算,31分就是31/60度,20.51秒就是20.51/3600度,结果就是39 + 31/60 + 20.51/3600 度。 2、 GPS转换为GCJ-02坐标 谷歌,高德,腾讯的地图API官网上,都不直接提供这样的坐标转换。如果要得到GCJ-02坐标,最好在他们的地图上直接取点,或者通过地址解析得到。(这个工具我后续会贴出来的。我就爱干这样的事情,哈哈。) 不过,在网上搜到了这样的接口,该接口的type=1就是GPS转到GCJ-02的墨卡托坐标。请大家对接口保密,哈哈。详见: http://map.sogou.com/api/documentation/javascript/api2.5/interface_translate.html#late_intro 3、GCJ-02与BD-09之间互转 国测局GCJ-02坐标体系(谷歌、高德、腾讯),与百度坐标BD-09体系的转换,在CSDN上有很详细的讲解: http://blog.csdn.net/coolypf/article/details/8569813 不过也有更简单的算法,线性算法(lat和lng是经纬度,球面坐标): To_B是转到百度,To_G是转到GCJ-02。 var TO_BLNG = function(lng){return lng+0.0065;}; var TO_BLAT = function(lat){return lat+0.0060;}; var TO_GLNG = function(lng){return lng-0.0065;}; var TO_GLAT = function(lat){return lat-0.0060;}; 4、经纬纬度转成墨卡托 网上也有详细讲解: http://bbs.esrichina-bj.cn/esri/viewthread.php?tid=78245 (大家发现没,高德是api,腾讯和百度是mapapi,说明什么?) 三、坐标偏移 如果您的坐标在转换之后,还有偏移,那么考虑以下几个方面。 A、原始坐标系弄错,比如以为自己是GPS坐标,但其实已经是GCJ-02坐标。 解决方案:请确保采集到的数据是哪个坐标体系,需要转换到哪个坐标系,再进行坐标转换。 B、原始坐标准确度不够 解决方案:如果您是GPS坐标,请确保采集GPS数据时,搜到至少4颗以上的卫星。并且GPS数据准不准,还取决于周围建筑物的高度,越高越不准,因为有遮挡。 如果本来就是GCJ-02坐标,在不同地图放大级别的时候,看到的地方可能不一样。比如你在地图级别4(国家)取到的坐标,放大到地图12级(街道)时,坐标就偏了。请确保在地图最大放大级别时,拾取坐标。 C、度分秒的概念混淆 比如,在google earth上采集到的是39°31'20.51,那么应该这样换算,31分就是31/60度,20.51秒就是20.51/3600度,结果就是39 + 31/60 + 20.51/3600 度。 D、经纬度顺序写反了 有些公司(比如高德,百度,腾讯)是先经度,再纬度,即Point(lng lat)。但谷歌坐标的顺序恰好相反,是(lat lng)。 相关问题的百度解释:http://developer.baidu.com/map/question.htm 百度地图API位置偏移的校准算法 C++算法  

webview显示富文本与JS和java的交互

webview显示富文本与JS和java的交互

算法语言 2年前 (2016-01-15) 浏览: 231 评论: 1

WebView是安卓下显示网页的控件,使用它可以实现一个简单的浏览器,访问互联网上的网页。也可以当作一个本地的文本显示控件,和textView类似。用 WebView 或者 TextView 来显示 HTML 内容,其交互的实现方式有较大的区别,以在 HTML 内容中的图片点击事件为例,在 WebView 模式下,开发人员需要通过注入 JavaScript 代码来进行点击事件的响应,Android 系统提供了 WebView 中 JavaScript 网页脚本调用 Java 类方法的机制;而在 TextView 中,图片会被解析为 ImageSpan,通过在 ImageSpan 上注册点击事件来响应。   一、webview显示富文本 比如iniHtml为一段String类型的html代码,使用 即可在webview上显示这段html。   二、webview显示项目资源中网页文件 我们可以将一个html文件index.html放在项目的assets文件下,使用WebView.loadUrl("file:///android_asset/index.html")来显示这个html文件,在这个html文件如果要引用asserts文件夹下的css、js文件,同样使用file:///android_asset/ ; 来访问。 三、java中调用javascript函数 使用loadurl调用java代码 四、javascript怎样调用java函数 在webview使用javascript调用外部的java函数可以让android的webview显示富文本有一种更加原生的体验,而不会让使用者感觉他在使用一个浏览器在查看你的显示文本。为了能让javascript调用java中代码,安卓采取将javascript的一个window下的对象M与java中的对象N做一个绑定或者说是映射,这样在javascript下对M的操作就相当于在java下N的操作。 实现方法:webview启用javascript,绑定js对象 addJavascriptInterface(Object object, String name)函数中第一个参数object是java下的对象,name是映射到javascript下的对象名。你可以为java下的object比如当前的activity申明一个click()函数,在javascript下使用window.name.click() 即可出发java下click函数。 需要指出的是在java中的click函数需要添加声明 @JavascriptInterface

第一个android studio+NDK程序

第一个android studio+NDK程序

软件开发 2年前 (2016-01-08) 浏览: 134 评论: 0

NDK(android native develop kits ):android 本地开发工具集 ,可以把c/c++ ->编译成一个 linux下可以执行的二进制文件 java代码里面就可以通过jni 调用执行二进制的文件。 什么是JNI :java本地开发接口,JNI是一个协议这个协议用来沟通java代码和外部的本地代码(c/c++).通过这个协议,java代码就可以调用外部的c/c++,代码外部的c/c++代码也可以调用java代码。 java可以实现上层应用的开发,但是不能写底层驱动,有些android项目必须和底层硬件打交道,比如要精确快速的获取某种传感器的值,那么java是不能办到的,那怎么办,就通过JNI开发,通过c/c++完成底层驱动或者值得获取,然后将值传回到java层。同样java层也可以将数据传递给c/c++层,这样通过JNI完成数据的交互。 为何要用到NDK? 概括来说主要分为以下几种情况: 1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。 2. 在NDK中调用第三方C/C++库,因为大部分的开源库都是用C/C++代码编写的。 3. 便于移植,用C/C++写的库可以方便在其他的嵌入式平台上再次使用。 MainActivity: 下面是通过javah命令自动生成的 cn_wangbaiyuan_ndktest_MainActivity.h   在build.gradle(Module:App)加入下列配置可指定生成.so文件的CPU平台类型以及so文件的名称,如果没有指定,android将会生成libapp.so,以及所有平台的so文件;生成so文件路径为:你的项目根目录\app\build\intermediates\ndk\debug\lib build.gradle(Module:App)    

触类旁通学习swift(1)语言简述

触类旁通学习swift(1)语言简述

算法语言 2年前 (2015-12-30) 浏览: 139 评论: 0

由于要参加一个iOS竞赛,所以极客人最近开始学习swift语言。swift语言是苹果2014年发布的一个开发苹果旗下软件的一种新的编程语言,貌似有取缔之前用来开发苹果软件的objective c语言的势头,所以个人觉得学习swift还是比较有前途的。由于开发iOS必须要MAC系统,之前花费了大量的时间给我的戴尔电脑安装了“黑苹果”,但因为驱动问题导致无法联网,十分影响学习。为此,十分感谢杨帆老师借了我一台闲置的MAC电脑。 与之前学习过的c++,java,php,javascript语言相比,swift语言在我看来更加高端或者说“高级”,比java等语言比swift更加简洁,对一些诸如数组等数据类型的操作功能极为强大,写相同量大swift的代码可以做很多的事情。简洁、高级的swift可以节省程序员打字的工作量,但是也意味着这个语言可能的封装度更大。封装性让成员易于操作但会让程序员离底层越来越远,上层函数的记忆量就会加大。swift和其它高级语言的不同还是很大的,不像java和php相似度极大,只要学会java,php在短时间内即可无师自通。 学过几门计算机语言之后,我认为再学习一门新的语言时与之前语言的比较十分重要。所以在学习swift时很有必要把它和其他语言进行类比学习,以加强记忆,防止各种语言之间的“串味”。 swift面向什么? swift和php相似,既支持面向过程又支持面向对象,没必要把所有的操作都写成一个类和方法,而java则是严格的面向对象语言。但PHP是一种脚本语言,但是swift不是,脚本语言是解释执行的,执行文件是文本; 编译语言,执行文件是二进制,swift需要经过编译生成一个二进制的可执行文件。 swift不是弱类型 swift和javascript一样没有显式地声明变量类型,但是在没有声明变量类型的swift会根据情况自动推断出变量类型。比如var a="hello world",a会被推断为string类型。

java中MD5 16和32位加密

java中MD5 16和32位加密

算法语言 2年前 (2015-10-04) 浏览: 1696 评论: 2

java中MD5 16和32位加密,下面的Md5类中,通过构造函数Md5(String sourceStr)传入加密字符串,而get16和get32顾名思义是分别获取字符串的16位和32位MD5哈希值。Md5加密方式不能反向解密,任何一个字符串乃至一个超大文件都可以获得MD5值,并且是独一无二的。一个4G大的文件加密为一段32位字符串后,即使对文件改了哪怕一个字节,算出来的Md5和原文件的Md5都会有天壤之别,所以Md5算法常作为大文件完整性的校验。 在线Md5加密、“解密”网站 网址:http://www.cmd5.com/ 需要指出的是,虽然Md5是难以解密的,但是由于同一字符串只能得到唯一的字符串,如果我们维护一个数据库记录下一些常用字符串的原值和Md5值,当输入的Md5能在数据库中找到记录的话,就能很快找到Md5值对应的原值。即所谓“解密”。 java中MD5 16和32位加密代码  

Android(Java)解析有道翻译API-Json数据

Android(Java)解析有道翻译API-Json数据

软件开发 2年前 (2015-08-24) 浏览: 1095 评论: 0

由于百度翻译、有道翻译等翻译服务都开放了自己的API,开发者可以使用它们提供的API很简单就能开发出自己的翻译软件。自己开发的软件可能在功能上不及它们强大,但是翻译的结果是一样的,同时不会内置其它偷跑流量的进程,同时界面也相对简洁,随心所欲地进行修改。 首先在有道API进行申请API ID和KEY后,将下列程序中clientID和clientSecret替换为ID和KEY,通过GET请求获得字符串进行解析。下面是我使用java解析JSON数据的代码: Android(Java)解析有道翻译API-Json数据  

java实现webservice+MySQl

java实现webservice+MySQl

算法语言 计算机技术 软件开发 2年前 (2015-06-26) 浏览: 2024 评论: 0

关于webservice 由于之前写过JAVA和PHP的JSON以及JMI的网络服务,这次在使用webservice完成管理待办事项自然就联想到它们。JAVA和PHP JSON、JMI、webservice三者共同之处是可以提供服务器的资源共享。 Web Service具有跨平台性,可以在不同设备、不同编程语言中进行调用,所以它的应用范围应该要比RMI更广 基于MySQl数据库查询的webservice实现管理待办事项列表 运行截图 添加用户: 添加事项: 查询事项: 删除事项: 清空事项: 服务器端代码是怎么实现的 下面介绍一下是怎样实现上述功能的服务端代码:。 我的服务端主要有四个类: 数据库连接及方法接口TodoListInterDbFace、数据库连接及方法实现类TodolistDb及方法实现类以及webservice接口TodoListServerInterface、Webservice实现类TodoListServer。   下面是示意图: 客户端代码是怎么实现的 wsimport -keep http://127.0.0.1:8002/webservice/TodoList?wsdl解析WSDL后: 创建TodoListClient类main方法为:   对于菜单的实现原理请参考我的博客文章:http://wangbaiyuan.cn/java-rmi-6-making-the-command-line-navigation-menu.html

【JAVA_RMI】(6)制作命令行导航菜单

【JAVA_RMI】(6)制作命令行导航菜单

算法语言 2年前 (2015-06-12) 浏览: 403 评论: 5

由于在eclipse运行配置里添加运行参数并不方便,建议将调试好的java工程导出为可以运行的jar包,然后在命令行打开jar所在文件夹,使用”java -jar <包名> <main函数参数1 参数2 ……>“,下图的help命令就是main函数执行时的参数数组arg[]的第一个元素arg[0]。参数以空格为分隔符,后面分别是arg[1]、arg[2]。 知道这点,制作java命令行的导航菜单就很简单。为了方便操作,极客人为这次试验还制作了GUI,支持GUI、命令行双界面模式运行应用。命令行的好处可能只有程序员才知道,它最大的好处、个人认为是可以批处理,这是习惯GUI的用户无法理解的。 效果预览: MeetingClient.java 下述代码通过匹配用户输入的main函数参数,分别执行在上一篇文章中定义的方法。其中输入GUI和不输入参数将启动GUI模式。   系列文章链接: SSD8_Ex3【JAVA_RMI服务】(1)概述RMI和网络API SSD8_Ex3【JAVA_RMI】(2)远程接口声明 SSD8_Ex3【JAVA_RMI】(3)开启RMI服务 SSD8_Ex3【JAVA_RMI】(4)会议数据库建表 SSD8_Ex3【JAVA_RMI】(5)数据库连接和会议方法定义 SSD8_Ex3【JAVA_RMI】(6)制作命令行导航菜单  

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

切换登录

注册