前言

东莞,晴,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. codeforces #256 A. Rewards

    A. Rewards time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  2. 玩转web之javaScript(五)---js和jquery一些不可不知的方法(input篇)

    很多时候我们都利用js和jquery中操作input,比如追加属性,改变属性值等等,我在这里简单的整理了一下,并在以后逐步补充. 1:删除input的某一属性. <input name=&quo ...

  3. Eclipse 在线安装fat jar插件

    在线安装步骤: eclipse菜单栏 help >software updates >Search for new features to install>new update si ...

  4. 表白程序源代码,android

    弄了一个表白程序,还是不错的,内容能够自己设置.并附上源代码:http://download.csdn.net/detail/a358763471/7803571 看下效果图吧.是动画的哦...

  5. AutoFac使用方法总结:Part III

    生命周期 AutoFac中的生命周期概念非常重要,AutoFac也提供了强大的生命周期管理的能力. AutoFac定义了三种生命周期: Per Dependency Single Instance P ...

  6. FTP文件操作之下载文件

    前面写了采用ftp上传文件,有了上传怎么能够没有下载呢?如果只有上传没有下载,那上传了也没啥用了.所以今天就跟大家一起学习学习使用ftp下载文件. 知道了怎么上传,那么下载也就变得很简单了,上传是把文 ...

  7. jQuery 焦点图,图像文件js档

    jQuery 焦点图,图片文件在js文件里 演示 XML/HTML Code <div id="photo_container"></div> JavaSc ...

  8. oracle 12c 三学习 pdb 可插拔测试

    DECLARE l_result BOOLEAN; BEGIN l_result := DBMS_PDB.check_plug_compatibility( pdb_descr_file => ...

  9. iOS 辛格尔顿

    单例模式: 为什么使用单例,单例模式的用途是什么?以下我们举一个样例来诠释一下 举个大家都熟知的样例--Windows任务管理器,如图,我们能够做一个这种尝试,在Windows的"任务栏&q ...

  10. MySQL InnoDB数据库备份与还原

    备份 进入cm黑窗口 输入下列命令 mysqldump -u 用户名 -p 数据库名称> c:\11.sql 回车执行 恢复 进入cm黑窗口 输入下列命令 mysql>use dbtest ...