Zedboard甲诊opencv图像处理(二)
通过前面的努力已经得到了n个轮廓了,现在要把最终的轮廓确定下来 ,然后进行特征提取。
先深入分析下轮廓和处理轮廓的方法:http://blog.csdn.net/hitwengqi/article/details/6929523
之前其实我尝试了用 cv::grabCut function把前景图像提取出来,但是这个方法需要的人工操作还是有点多,至少我这里没办法用。所以又放弃了。
先来看看cvApproxPoly()函数吧,http://blog.csdn.net/bruce_zeng/article/details/8074253
然后还有曲线拟合的方法:http://hi.baidu.com/bitroc/item/8f7b8d12f69a4f0ae65c3687
总之还是尝试吧,谁让我菜呢!
首先我采用了形态学处理的方法,进行闭操作,先进行膨胀,然后腐蚀,然后closed,对处理后的二值图像进行最大轮廓查找,去掉其他的轮廓。如果光照处理好的情况下,效果还不错:



但是貌似不是很稳定啊,换个指甲效果就没这么好了。还有就是就算我能处理程这样,还有两条手指头的边界很麻烦啊,需要去掉。当然我还要把最差的效果显示一下:

所以我的想法是,一改进采集装置,固定手指位置;二修改程序或者进一步处理.
Mat Widget::FindmaxCounters(Mat image)
{
vector<vector<Point> > contours;
vector<Point> maxContour;
vector<vector<Point> > ::iterator itc;
Mat dst = Mat::zeros(image.rows, image.cols, CV_8U);
findContours( image, contours, CV_RETR_EXTERNAL , CV_CHAIN_APPROX_NONE );
//找到最大的轮廓
size_t maxSize=;
itc = contours.begin();
while(itc!=contours.end())
{
if(itc->size()>maxSize)
{
maxSize=itc->size();
maxContour=*itc;
}
++itc;
}
itc = contours.begin();
while(itc!= contours.end()) { //Eliminate smaller contours
if(itc->size() < maxSize)
itc=contours.erase(itc);
else
++itc;
}
QString str1;QFont ft;
int ilz1 = (int)contours.size();
str1.setNum(ilz1);ft.setPointSize();
ui->label_9->setAlignment(Qt::AlignCenter);//设置字居中显示
ui->label_9->setFont(ft);
//放到QLabel上显示
ui->label_9->setText(str1);
ui->label_9->show();
drawContours(dst, contours, , Scalar(), CV_FILLED);
//CvRect s;
//CvPoint pt;
//vector<vector<Point> > contours;
//Mat dst = Mat::zeros(grayimage.rows, grayimage.cols, CV_8U);
//findContours( grayimage, contours, CV_RETR_EXTERNAL , CV_CHAIN_APPROX_NONE );
//s=cv::boundingRect(contours);
//pt = cvPoint(s.x+s.width/2,s.y+s.height/2);//-------可以用其他方式获得连通域的一个内点作为起始种子点
//cv::floodFill(dst, pt ,cvScalarAll(255));
return dst;
}
Zedboard甲诊opencv图像处理(二)的更多相关文章
- Zedboard甲诊opencv图像处理(四)
接着上一篇博客,继续改进,现在为了是图像处理结果更加稳定,我实在没有办法了,只好先提取手指,再提取指甲. 把手指从背景里面提出来还是挺简单的,可惜的是我研究这么半天还是这结果,好沮丧. 怎么办呢,时间 ...
- Zedboard甲诊opencv图像处理(三)
整个工程进展到这一步也算是不容易吧,但技术含量也不怎么高,中间乱起八糟的错误太烦人了,不管怎么样,现在面临了最大的困难吧,图像处理算法.算法确实不好弄啊,虽然以前整过,但都不是针对图像的. 现在的图像 ...
- OpenCV图像处理篇之边缘检测算子
OpenCV图像处理篇之边缘检测算子 转载: http://xiahouzuoxin.github.io/notes/ 3种边缘检测算子 一阶导数的梯度算子 高斯拉普拉斯算子 Canny算子 Open ...
- 《OpenCV图像处理编程实例》
<OpenCV图像处理编程实例>例程复现 随书代码下载:http://www.broadview.com.cn/28573 总结+遇到的issue解决: 第一章 初识OpenCV 1.VS ...
- zedboard上移植OPENCV库
zedboard上移植OPENCV库 之前做了很多移植OPENCV库的工作,但是需要包含的各种库,需要交叉编译,X264 ,JPGE ,FFMPGE等等 注意:在<嵌入式系统软硬件协同设计实战指 ...
- 开发环境配置--Ubuntu+Qt4+OpenCV(二)
同系列文章 1. 开发环境配置--Ubuntu+Qt4+OpenCV(一) 2. 开发环境配置--Ubuntu+Qt4+OpenCV(二) 3. 开发环境配置--Ubuntu+Qt4+OpenCV(三 ...
- 使用OpenCV查找二值图中最大连通区域
http://blog.csdn.net/shaoxiaohu1/article/details/40272875 使用OpenCV查找二值图中最大连通区域 标签: OpenCVfindCoutour ...
- Python+OpenCV图像处理(一)
Python+OpenCV图像处理(一): 读取,写入和展示图片 调用摄像头拍照 调用摄像头录制视频 1. 读取.写入和展示图片 图像读入:cv2.imread() 使用函数cv2.imread() ...
- Python+OpenCV图像处理(一)——读取显示一张图片
先在此处先声明,后面学习python+opencv图像处理时均参考这位博主的博文https://blog.csdn.net/u011321546/article/category/7495016/2? ...
随机推荐
- Android摇一摇振动效果Demo
前言 在微信刚流行的时候,在摇一摇还能用来那啥的时候,我也曾深更半夜的拿着手机晃一晃.当时想的最多的就是.我靠,为神马摇一下须要用这么大的力度,当时我想可能腾讯认为那是个人性的设计.后来才发觉 ...
- 关于IE6幽灵字体
前言:今天做项目的时候在IE6下出现了这样的一种现像,这种情况只在IE6下出现,最后在网友的帮助下这个问题最终得到了解决.所以马上作了下笔记! 情况如下图: 我在网上找了点资料出现IE6下幽灵字体的情 ...
- Android开发编码规范(自用)
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! Android开发编码规范 目的及指导原则 目的 统一规范 Eclipse编辑环境 ...
- js框架页跳转
1.跳出框架,在父页面. <script type="text/javascript"> window.parent.frames.location.href=&quo ...
- ASP.NET MVC全局观
全局 首先我们来看一副图片,由于这幅图是我自己画的,不是摘自微软官方,所以如果有什么不到位的地方还望海涵! 首先,用户通过Web浏览器向服务器发送一条url请求,这里请求的url不再是xxx ...
- [c#]asp.net开发微信公众平台(8)微信9大高级接口,自定义菜单
前7篇把最基础的消息接收和回复全做完了, 也把高级接口的入口和分拆处理写好了空方法, 此篇接着介绍微信的9大高级接口, 并着重讲解其中的自定义菜单. 微信9大接口为: 1.语音识别接口 2.客服接 ...
- C# TextBox控件 显示大量数据
串口通信:在使用TextBox空间显示数据时,因为要显示大量的接收到的数据,当数据量大且快速(串口1ms发送一条数据)时,使用+=的方式仍然会造成界面的卡顿(已使用多线程处理),但使用AppendTe ...
- [目录][总结] C++和Java 中的主要操作对比
总结一些,C++ 和Java 中的一些常用操作对比,就当是自己的查询工具书啦.(暂时按随笔的更新时间排序) [Stack] c++ V.S. Java (2015.04.27) [Map] c++ ...
- Java实现生产者消费者问题与读者写者问题
摘要: Java实现生产者消费者问题与读者写者问题 1.生产者消费者问题 生产者消费者问题是研究多线程程序时绕不开的经典问题之一,它描述是有一块缓冲区作为仓库,生产者可以将产品放入仓库,消费者则可以从 ...
- css3中的提供的元素变化属性
通过 CSS3 提供的2d元素转换,我们能够对元素进行移动.缩放.转动.拉长或拉伸. css3中为我们 提供了: translate() rotate() scale() skew() matrix( ...