前言

东莞,晴,29至27度。忙了一天,最终能够写写东西了。今天继续昨天的话题,我们在昨天的例了基础上完好,通过匹配关键点求出映射从而找到场景中的已知对象。

目标

本文你将学习

  1. 採用nodeitk的findHomography和perspectiveTransform进行对象识别。
  2. 此外,样例基本包括nodeitk的一些基本数据结构的使用:NodeOpenCVMat, NodeOpenCVKeyPoint, NodeOpenCVPoint
  3. 上述主要的数据结构在nodeitk版本号稳定后将会在使用手冊中说明

代码

var node_itk = require('./node-itk');
var img_object = node_itk.cv.imread( "./images/box.png", node_itk.cv.CV_LOAD_IMAGE_GRAYSCALE );
var img_scene = node_itk.cv.imread( "./images/box_in_scene.png", node_itk.cv.CV_LOAD_IMAGE_GRAYSCALE );
minHessian = 400
detector = new node_itk.cv.NodeOpenCVFeatureDetector("SURF")
detector.Set("hessianThreshold", minHessian)
keypoints_object = detector.Detect( img_object );
keypoints_scene = detector.Detect( img_scene );
extractor = new node_itk.cv.NodeOpenCVDescriptorExtractor("SURF");
descriptors_object = extractor.Compute(img_object, keypoints_object)
descriptors_scene = extractor.Compute(img_scene, keypoints_scene)
matcher = new node_itk.cv.NodeOpenCVDescriptorMatcher("FlannBased");
matches = matcher.Match(descriptors_object, descriptors_scene);
max_dist=0
min_dist=100
for (var i = 0; i < descriptors_object.Rows(); i++ ) {
dist = matches[i].GetDistance();
if (dist < min_dist) min_dist = dist;
if (dist > max_dist) max_dist = dist;
};
console.log("-- Max dist : " + max_dist + "\n")
console.log("-- Min dist : " + min_dist + "\n")
var good_matches = [];
for( var i = 0; i < descriptors_object.Rows(); i++ ){
if( matches[i].GetDistance() <= 3*min_dist )
{ good_matches.push( matches[i] ); }
}
img_matches = node_itk.cv.DrawMatches(img_object, keypoints_object, img_scene, keypoints_scene, good_matches);
var obj=[], scene=[];
for (var i = 0; i < good_matches.length; i++) {
obj.push( keypoints_object[good_matches[i].GetQueryIdx()].PT() )
scene.push( keypoints_scene[good_matches[i].GetTrainIdx()].PT() )
}; H = node_itk.cv.FindHomography( obj, scene, node_itk.cv.CV_RANSAC ); obj_corners = []
obj_corners[0] = new node_itk.cv.NodeOpenCVPoint("Point2d", [0,0])
obj_corners[1] = new node_itk.cv.NodeOpenCVPoint("Point2d", [img_object.Cols(),0])
obj_corners[2] = new node_itk.cv.NodeOpenCVPoint("Point2d", [img_object.Cols(),img_object.Rows()])
obj_corners[3] = new node_itk.cv.NodeOpenCVPoint("Point2d", [0,img_object.Rows()]) tmp = new node_itk.cv.NodeOpenCVPoint("Point2d", [img_object.Cols(),0]);
color = new node_itk.cv.NodeOpenCVScalar("Scalar", [0,255,0]);
scene_corners = node_itk.cv.PerspectiveTransform(obj_corners, H.res);
node_itk.cv.Line(img_matches, scene_corners[0].Add(tmp), scene_corners[1].Add(tmp), color, 2)
node_itk.cv.Line(img_matches, scene_corners[1].Add(tmp), scene_corners[2].Add(tmp), color, 2)
node_itk.cv.Line(img_matches, scene_corners[2].Add(tmp), scene_corners[3].Add(tmp), color, 2)
node_itk.cv.Line(img_matches, scene_corners[3].Add(tmp), scene_corners[0].Add(tmp), color, 2)
node_itk.cv.NamedWindow( "Good Matches & Object detection", node_itk.cv.CV_WINDOW_AUTOSIZE );
node_itk.cv.imshow( "Good Matches & Object detection", img_matches );
node_itk.cv.WaitKey ( 0 );

结果

小结

本文是昨天话题的深化,代码依旧比較简洁。这是nodeitk遵循的原则:以简单的方式高速实现图像处理应用。喜欢的朋友就点踩,想说点东西的就评论吧!^_^ 待续

使用nodeitk进行对象识别的更多相关文章

  1. 写给程序员的机器学习入门 (九) - 对象识别 RCNN 与 Fast-RCNN

    因为这几个月饭店生意恢复,加上研究 Faster-RCNN 用掉了很多时间,就没有更新博客了.这篇开始会介绍对象识别的模型与实现方法,首先会介绍最简单的 RCNN 与 Fast-RCNN 模型,下一篇 ...

  2. 写给程序员的机器学习入门 (十) - 对象识别 Faster-RCNN - 识别人脸位置与是否戴口罩

    每次看到大数据人脸识别抓逃犯的新闻我都会感叹技术发展的太快了,国家治安水平也越来越好了

  3. 写给程序员的机器学习入门 (十一) - 对象识别 YOLO - 识别人脸位置与是否戴口罩

    这篇将会介绍目前最流行的对象识别模型 YOLO,YOLO 的特征是快,识别速度非常快

  4. Hibernate 系列 08 - 对象识别机制

    目录导读: Hibernate 系列 学习笔记 目录 本篇目录: 为了区别不同的对象,有两种识别方法: 1. 内存地址识别(“==”号识别) 2. equals()和hashCode()识别 1. 以 ...

  5. QTP对象识别tips

    1.已添加的对象无法再次识别成功,编辑对象存储库中测试对象详细信息.子对象无法识别成功时,先检查父对象是否可成功识别. 2.使用.NET Windows Forms 侦测器检测后再使用object s ...

  6. SilkTest天龙八部系列7-动态对象识别

    在测试web应用时,我们常常需要面对web页面对象变化频繁,并且使用预定义方式识别对象慢的困难.为了解决这些问题,SilkTest引入了dynamic object recognition技术,它使用 ...

  7. 【Selenium专题】 FAQ_对象识别_Compound class names are not supported

    测试代码 public void login(){ WebDriver driver = new ChromeDriver(); driver.get("http://IP:Port/cli ...

  8. python imageai 对象检测、对象识别

    imageai库里面提供了目标识别,其实也可以说是目标检测,和现在很多的收集一样就是物体识别.他可以帮你识别出各种各样生活中遇见的事物.比如猫.狗.车.马.人.电脑.收集等等. 感觉imageai有点 ...

  9. QTP技术支持之QTP对象无法识别(转自582357212的个人空间,链接:http://www.51testing.com/html/64/305564-847787.html)

    QTP自动化测试从业者,或者很多练习使用QTP开发自动化测试代码的人员遇到最多的问题恐怕就是对象无法识别了,对象无法识别原因有很多种,根据经常对QTP自动化测试脚本开发人员的技术Support,我总结 ...

随机推荐

  1. [Sqlite]--&gt;Java采用jdbc联系Sqlite各种特定的工艺数据库的数据操作

    引:     1, Sqlite在Windows.Linux 和 Mac OS X 上的安装过程     2.嵌入式数据库的安装.建库.建表.更新表结构以及数据导入导出等等具体过程记录     3,嵌 ...

  2. Oracle 11g client安装和配置。

    数据库和client在不同的机器. 安装前的准备.在安装过程中Oracle数据库server导航到下面的文件夹. 将listener.ora和tnsnames.ora中的host中的localhost ...

  3. Iphone CodeSign error: no provisioning profile at path 错

    今天在退房手续,变化了profile,当再次进行整理编译项目时.就出现了这个问题,在xCode 6 开发环境下出现了, 出现这个错误提示Code Sign error: Provisioning pr ...

  4. 在汉澳sinox2014建立ZFS高可靠文件存储系统

    在汉澳sinox2014建立ZFS高可靠文件存储系统 汉澳sinox2014能够用比較小的固态硬盘安装,文件系统能够用zfs系统存放. 请准备一些硬盘,比方三块SCSI硬盘:da0,da1,da2 如 ...

  5. Android应用性能測试

    Android内存限制 java虚拟机有内存使用上限的限制 adb shell进入手机,这此參数被纪录在/system/build.prop中,假设想直接查看能够使用adb shell getprop ...

  6. Directx11学习笔记【二十二】 用高度图实现地形

    本文由zhangbaochong原创,转载请注明出处http://www.cnblogs.com/zhangbaochong/p/5827714.html 在前面我们曾经实现过简单的地形(Direct ...

  7. CocoStudio学习资源

    CocoStudio安装包及实例project:http://www.cocoachina.com/bbs/read.php?tid=154886 CocoStudio视频教程系列:http://mo ...

  8. struts 1.x 原理

    Struts 当我接触到这个框架的时候.我就在想为什么是struts,而不是什么CraigFramework.结构.支撑,这样来理解也不难怪了. 为什么须要struts? 在struts in act ...

  9. Linux查看命令终止进程

    Linux查看命令终止进程 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ps PID TTY TIME CMD 2576 pts/0 00:00:00 ba ...

  10. AFNetworking框架_上传文件或图像server

    的文本 XXXXXXXXXX在自己的论点更填写 - (void)uploadImageWithImage:(NSString *)imagePath { //上传其它所需參数 NSString *us ...