opencv直线检测在c#、Android和ios下的实现方法
opencv直线检测在c#、Android和ios下的实现方法
本文为作者原创,未经允许,不得转载 ;原文由作者发表在博客园:http://www.cnblogs.com/panxiaochun/p/5512142.html
c#实现方法
LineSegment2D[][] lines = rgbRect.HoughLines(10, 150, 10, (Math.PI), 10, 0, 50);
for (int i = 0; i < lines[0].Length; i++)
{
rgbImage.Draw(line[0][i], new Rgb(System.Drawing.Color.Red), 1);
}
c#下的实现方法很简单,opencv的很多方法都被封装在对象里面,只要让对象自己执行执行检测就行,比如上面的rgbRect是个image<rgb,byte>类的对象,让它自己执行霍夫直线检测,其中第一第二个参数是canny的阈值,c++下实现直线检测前要进行canny,在这里直接设置就行,只需要调用一次。
找到的直线是一个二维数组,但是,数组里面只有一行多列:[0][n],例如lines[0][0]是找到的第一条直线,其中lines[0][0].P1是第一条线的一个点的坐标,lines[0][0].P2是第一条线的第二个点的坐标
注意:opencv找到的直线不是按照坐标系的x轴从小到大存放的,而是找到的直线的先后顺序,也就是存放在数组里的第一条线的x轴能会比第二条线的x轴的坐标要大.
Android实现方法
Mat imageBuffer = new Mat(rgbImage.width(),rgbImage.height(),CvType.CV_8UC1);
Imgproc.Canny( rgbImage, imageBuffer,30, 150);
Mat lines = new Mat();
Mat rgbRect = imageBuffer.clone();
Imgproc.HoughLinesP(rgbRect, lines, 10, (Math.PI), 10, 0, 50);
double[] linePoints = new double[4];
for(int i = 0 ; i < lines.rows;i++){
linePoints = lines.get(i, 0);
Imgproc.line(rgbImage, new Point(linePoints[0],linePoints[1]), new Point(linePoints[2], linePoints[3]), new Scalar(255,0,0), 1);
}
Android的直线检测是存放在一个CV_32SC4的Mat矩阵中,这个矩阵是N行1列的,行数代表找到的直线条数,每个通道按照x1、y1、x2、y2、存放直线的坐标,通过get(row,col)可以得到矩阵的每个点的数值,存放在一个double数组里就可以得到直线位置。
android的直线检测前要先进行canny ,但是并不能像c#和c++版那样把canny的输出对象设置为输出对象,在c#和c++版下是可以的,所以必须得新建一个Mat存放canny后的图像
ios实现方法
cv::canny(rgbRect,rgbRect,50,150);
std::vector<cv::Vec4i> lines;
cv::HoughLinesP(rgbRect, lines, 1, CV_PI, 10,10,50);
for( size_t i = 0; i < lines.size(); i++ )
{
line( rgbImage, cv::Point(lines[i][0], lines[i][1]),
cv::Point(lines[i][2], lines[i][3]), cv::Scalar(0,0,255), 1, 8 );
}
ios版其实是在c++下实现的,检测到的直线是存放在一个std::vectorcv::Vec4i的容器里,每个元素里存放4个浮点数,也是按照x1、y1、x2、y2的方式存放
ios版和c#canny不需要新建一个存放输出对象,可以直接把输入图像设置为输出图像
以上的直线检测都是用霍夫概率直线检测houghLinesP,检测到的直线都是有距离和坐标点的。
opencv直线检测在c#、Android和ios下的实现方法的更多相关文章
- Cocos2d-x在win32,android和IOS下的文件读写问题
最近在学习和使用Cocos2d-x框架,虽然说的是跨平台,但是在用VS进行开发,然后移植到android或IOS下,也可能会出现各种问题,需要做细微的调整. 例如我在做文件读写操作的时候,很可能在wi ...
- 请问如何查询一个APP的Android和iOS下载量?
作者:Jasmine Jiang链接:http://www.zhihu.com/question/28533067/answer/87871598来源:知乎著作权归作者所有,转载请联系作者获得授权. ...
- 【转】【Android】Android不同版本下Notification创建方法
使用 new Notification(int icon, CharSequence tickerText, long when)构造函数时,Eclipse却提示:" The constru ...
- Android不同版本下Notification创建方法
项目环境 Project Build Target:Android 6.0 问题: 使用 new Notification(int icon, CharSequence tickerText, lon ...
- OpenCV 直线检测
/*------------------------------------------------------------------------------------------*\ This ...
- iOS 下 Podfile 使用方法
配置 Podlist Pod 是 iOS 下包管理工具,类似于 JavaScript 里的 npm 或 yarn. 创建 Podfile 创建 Podfile 有两种方式: 打开 Terminal,在 ...
- Android不刷机下的app2sd方法(dex cache占空间解决篇)
抱着5年的HTC G7这个古董,一直没有想法去换换. 近期微信.支付宝什么的apk应用都開始走程序巨型化,一次性就来个50MB的空间占用,让还是Android 2.2的手机怎样吃的消? 看看100多M ...
- Android+openCV人脸检测2(静态图片)
前几篇文章中有提到对openCV环境配置,这里再重新梳理导入和使用openCV进行简单的人脸检测(包括使用级联分类器) 一 首先导入openCVLibrary320 二 设置gradle的sdk版本号 ...
- Python+OpenCV图像处理(十四)—— 直线检测
简介: 1.霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法.主要用来从图像中分离出具有某种相同特征的几何形状(如,直线 ...
随机推荐
- 20款时尚的 WordPress 简洁主题【免费下载】
在这篇文章中,我们收集了20款时尚的 WordPress 简洁模板.WordPress 是最流行的博客系统,插件众多,易于扩充功能.安装和使用都非常方便,而且有许多第三方开发的免费模板,安装方式简单易 ...
- jQ函数after、append、appendTo的区别
1.after函数定义和用法:after() 方法在被选元素后插入指定的内容.参考:http://keleyi.com/a/bjac/cfyxd60g.htm 语法:$(selector).after ...
- 转:ibatis常用16条SQL语句
1.输入参数为单个值 <delete id="com.fashionfree.stat.accesslog.deleteMemberAccessLogsBefore" par ...
- Autodesk 最新开发技术研讨会-北京-上海-武汉-成都-西安-PPT下载
经过半月的奔波,转遍祖国大好河山.结论,还是喜欢成都,安逸~,好希望能在成都生活,竹林里品茶,不亦乐乎~ 如果你没能参加我们的研讨会,下面的PPT供参考: 面向世界.面向未来 – Autodesk 云 ...
- html框架—多对话框(相同id)处理
一个网站的数据大多数都是异步刷新的,这没什么好说的,然后现在很多前后端框架,大家都知道框架很好用,不用自己写样式,只要利用框架上的语法就能做出漂亮的动态的效果来,而用框架的话大多数的动态效果都是动态生 ...
- 关于iOS中的时间
两类 绝对时间 [NSDate date].CFAbsoluteTimeGetCurrent(),或者gettimeofday(). 返回的是从某一个时刻开始,度过的秒数.会随着用户设置的系统时间更改 ...
- iOS 单例模式 浅叙
单例模式作用 可以保证在程序运行过程中,一个类只有一个实例,而且该实例易于供外界使用 从而方便地控制了实例个数,并节约系统资源 单例模式使用场合 在整个引用程序中,共享一份资源(这份资源只需要创建初始 ...
- iOS中如何知道app版本已更新
主要用于程序升级,开启程序后是否显示新特性两个方面. 1.苹果app版本 苹果规定,程序的版本只能升不能降.例如1.0->1.1可以,1.1->1.0就不可以,不允许上架. 2.app版本 ...
- zendstudio文件编码修改问题
转载:http://blog.csdn.net/kunlong0909/article/details/7818620 朋友,在zendstudio ide中,你是否碰到导入一个项目后,发现项目中文件 ...
- Spring MVC 原理小结
主要由DispatcherServlet.处理器映射.处理器.视图解析器.视图组成 1.DispatcherServlet接收到一个HTTP请求,根据对应配置文件中的处理机映射,找到处理器(Han ...