勇哥引言:OpenCV是计算机视觉库,Tensorflow是深度学习框架。
OpenCV包含了大量的图像处理和计算机视觉的算法,但是在机器学习方面明显不足,ML模块只有SVM,MLP,
kNN等有限的几种算法。dnn模块也是调用别的框架。
Tensorflow是专为深度学习而生,可以方便的实现各种深度学习算法。
二者不属于同一领域,做视觉用OpenCV,做深度学习用Tensorflow。或者二者结合做图像识别等等。 强大OpenCV从自OpenCV
opencv形态学运算opencv形态学运算形态学是生物学中研究动物和植物结构的一个学科分支。数学形态学是以形态为基础对图像进行分析的数学工具。基本思想是用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对图像分析和识别的目的。形态学图像处理的数学基础是集合论。1964,Matheron指导下的Serra做岩相学分析。1966年命名Mathematical Morphology。1968年成立枫丹白露数学形态学研究中心。70年代纹理分析器商业应用。理论方面有Mathron的《随机集和积分
〇.算法效果展示0.1要定位的模板一找到的匹配在有污损情况下找到的匹配0.2要定位的模板2找到的匹配一. 理论部分模板匹配的算法包括基于灰度的匹配,基于特征的匹配,基于组件的匹配,基于相关性的匹配以及局部变形匹配。基于灰度的匹配一般应用在没有缩放和旋转,颜色变化不大的场合。基于特征的匹配一般应用在具有缩放和旋转,颜色变化较大的场合。在模板各个组件有相对位移的情况下,使用基于组件的匹配算法。在图像模糊,目标定位不依赖于边缘的情况下一般使用基于相关性的匹配。目标有局部变形的情况使用局部变形匹配算法。
首先使用拍照工具拍摄一些JPG格式的标定图片。然后放到特定的文件夹下,我这里是image文件夹。在标定前,首先读取该文件夹下的图片文件,获取这些图片文件的文件名,以备将来opencv读取图片使用。这样做的好处是不用特意给拍摄的图片按照特定格式重新命名,大大减小了工作量。标定时,程序会检查这些图片是否能正常提取格点,如果不能,程序自动舍去,在标定时该幅图片不参与计算。标定完成后,程序会把标定结果显示到控制图上,并把标定的更详细结果写入的txt文件。用到的opencv版本的2.4.10,vs版本是2
我们知道opencv的模板匹配是个鸡肋,效果跟halcon的模板匹配没法比。感谢下面这位大神贡献了实现类似halcon形状匹配的源码。前言用过halcon形状匹配的都知道,这个算子贼好用,随便截一个ROI做模板就可以在搜索图像中匹配到相似的区域,并且能输出搜索图像的位置,匹配尺度,匹配角度。现在我们就要利用opencv在C++的环境下复现这个效果。我们先看下复现的效果图,提升下学习的欲望(要在搜索图像中找到所有的K字母)。下图是模板图像,为一个"K"字母。下图是待搜索的图像,
上一节呢,我们利用openni2获得了彩色图像和深度图像,这一节我们用openni2的转换函数将深度数据转换为三维点云,然后用彩色数据作为纹理将点云用opengl画出来。首先介绍CoordinateConverter::convertDepthToWorld(const VideoStream& depthStream, int depthX, int depthY, DepthPixel depthZ, float* pWorldX, float* pWorldY, float* pW
上一篇讲了利用随即一致性来减少错误匹配的情况,这一篇讲一下使用最小二乘多项式平滑方法来减少姿态的抖动问题。因为我们的设备是手持单目,相机在移动的过程中,会产生细微的抖动。虽然EKF或者G2O(通用图优化)会帮我们最小化错误,但是当我们得到正确的最接近真实的姿态后,我们会发现这些姿态是存在细微抖动的。下图为未平滑的相机姿态(Matlab):我们看到有大量的抖动在里面。体现在图像上则是AR物体会有小幅度的波动。这个波动其实很小,如果AR物体比较小的话,这个波动是不明显的(肉眼几乎察觉不到)。但是当我
这一节应该是本项目(Feature Tracking and Synchronous Scene Generation with a Single Camera)的最后一节了,实现了两种选取跟踪点和恢复跟踪的方法,顺便把AR物体换成了AR小游戏。首先讲讲跟踪点的选取。之前的文章中我们选取ORB作为特征点检测的办法,然后手动选取N个ORB角点去利用LK光流法跟踪。这样的方法是事先定义好3D点的位置,比如正方形的四个角点(-1,-1,0),(1,-1,0),(1,1,0),(-1,1,0),然后在2
这段时间把项目的剩余部分全部完成了,包括角点检测改进和恢复追踪。这一节先继续讲利用OpenGL画AR物体。上一节中我们利用SolvePnP得到了相机的姿态(rotation和translation),利用姿态信息我们可以通过加载model_view_matrix来控制opengl里的相机。首先我试了用cmake重新编译with_opengl版的opencv,但是失败了(后来有了成功编译with_openni的经验后,回来再试with_opengl成功了,但是项目都写完了改起来太麻烦,以后有机会会
用了ORB那么久,今天第一次将256bit的描述子打印出来,直观看到了match的汉明距离。上代码:#include <iostream>
#include <bitset>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.