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? ...
随机推荐
- java中不常见的keyword:strictfp,transient
1.strictfp, 即 strict float point (精确浮点). strictfp keyword可应用于类.接口或方法.使用 strictfp keyword声明一个方法时,该方法中 ...
- iOS蓝牙4.0协议简单介绍
iOS开发蓝牙4.0的框架是CoreBluetooth,本文主要介绍CoreBluetooth的使用,关于本文中的代码片段大多来自github上的一个demo,地址是myz1104/Bluetooth ...
- Java static块
首先,我们看一个实际例子: class Test{ public static int X=100; public final static int Y=200; public Test(){ Sys ...
- 解决svn状态图标不显示的办法
SVN是一款出色的代码版本控制工具,大部分开发者都在使用.由于前不久刚做了系统,所以要重装一下SVN,结果就出了问题,问题就是,不管是文件处于什么状态他的提示图标都不显示,这就太不给力了吧.通过搜寻, ...
- C语言之可重入函数 && 不可重入函数
可重入函数 在 实时系统的设计中,经常会出现多个任务调用同一个函数的情况.如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任 务调用这个函数的数据,从而导致不可预料 ...
- ASP.NET MVC上传文件的几种方法
1.Form表单提交 <p>Form提交</p> <form action="@Url.Action("SavePictureByForm" ...
- UIButton上图片和文字的位置调整
UIButton 上默认是图片在左文字在右,而大多数情况这样默认的的显示形式都不能满足我们的需求,接下来我就这个问题分享一下我的心得. 默认情况下,不设置的效果,都是居中实现 UIButton *bu ...
- Swift中的便利构造器和构造器链
import UIKit // 1.一个类中至少有一个指定构造器, 其必须负责初始化类中所有的实例存储属性 // 2.便利构造器属于次要的, 辅助性的构造器 // 3.类中可以不定义便利构造器, 便利 ...
- Codeforces Round #278 (Div. 1)
A A monster is attacking the Cyberland! Master Yang, a braver, is going to beat the monster. Yang an ...
- Ajax实现三级联动(0520)
查询数据库中的chinastates表,通过父级代号查询相应省市区. 实现界面: 在js页面实现三级联动 在JQuery中调用Ajax方法(引用JQuery文件一定放在最上面) 用插件的形式,创建三个 ...