看到深度学习里面的教学动不动就是拿MNIST数据集,或者是IMGPACK数据集来教学,这些都是已经制作好的数据集,我们大家肯定都很疑惑怎么制作自己的数据集呢? 接下来我就自己制作了一个数据集,图片3600张,每张的高宽分别为240-320 获取根目录下所有子文件夹: PathRoot = 'F:\process\finger_vein-master\db100 '; list = dir(PathRoot); 获取在下一层的所有子文件夹,因为我们的数据很多时候都是不在一个文件夹,或者是在一个大文件夹中的很多小文件中,所以这时候就需要多重遍历,一层,一层的遍历下去 ,拿到我们想要的所有数据 至于这里为什么是 3 开始? db100 里面的每一个小文件夹(001-002-003)中的left 和 right 中 这里用matlab 三重遍历文件提取数据 最后全部保存在 imgPack中 在用 save 的函数 将数据集保存成
本文由腾讯云+社区自动同步,原文地址 https://stackoverflow.club/read-mat-file-in-python/ 两种在matlab和python间共享数据的方法。 一是用scipy 二是用h5py scipy提供了loadmat和savemat来读写.mat文件 import scipy.io as sio #matlab文件名 matfn=u'your_file_name ' data=sio.loadmat(matfn) #注意中括号里面的名称是在.mat中的,在matlab生成数据时确定 xi = data['xi'] yi = data['yi'] python存储 .mat文件供matlab使用 import scipy.io as sio import numpy as np ###下面是讲解python怎么读取.mat文件以及怎么处理得到的结果### load_fn ,python中数组行排列 ###下面是讲解python怎么保存.mat文件供matlab程序使用### save_fn = 'xxx.mat' save_array = np.array([1,2,3,4
一键领取预热专享618元代金券,2核2G云服务器爆品秒杀低至18元!云产品首单低0.8折起,企业用户购买域名1元起…
IplImage IplImage数据结构的定义在opencv\build\include\opencv2\core\types_c.h文件中。 地位等同于Mat,可以说是历史版本了。 Mat Mat这个数据结构定义在opencv\build\include\opencv2\core\core.hpp这个文件。 protected: void initEmpty(); }; Mat是OpenCV最基本的数据结构,Mat即矩阵(Matrix)的缩写我们在读取图片的时候就是将图片定义为Mat类型,其重载的构造函数一大堆 其中有一个构造函数可以很方便的直接将IplImage转化为Mat Mat(const IplImage* img, bool copyData=false); 基本函数使用 imread 功能:从一个文件中载入图片 ■ 第二个参数,InputArray类型的img,一般填一个Mat类型的图像数据就行了。
在构造方法中配置StereoBM算法的一下参数,有些参数是相机标定的参数,具体用法参考《双目摄像头测量距离》这篇文章。 更加这篇教程,完成修改StereoBM算的相机标定的参数。 在MainActivity.java中,简单几步就完成了双目测距,在使用OpenCV之前一定要执行OpenCVLoader.initDebug(),然后读取assets文件夹中的图像,分别是是左右目拍摄保存的图像 计算完成之后,为了方便查看图像中的距离,把结果图在ImageView上显示,然后为ImageView添加点击获取坐标事件。 : [在这里插入图片描述] 使用摄像头测距 上面的是实现读取两张计算物体距离,并没有使用摄像头拍摄,那么接下来我们就通过使用Android设备接的双目摄像头,实时拍摄图像计算物体距离。 ,使用StereoBMUtil工具类读取分割后的左右目摄像头的图像执行计算,把结果图在ImageView上显示,然后为ImageView添加点击获取坐标事件。
地图我使用的是百度地图LBS 版本5.3,海外的话考虑到信息数据多少、性能、包大小、数据源等多方面因素推荐使用mapbox。 assets 文件夹里的司机证件照片,也就是下面图片里的 getDriverLicenseFromMySample() 方法,可以立刻进行测试。 函数将hsv彩色图片的根阈值进行过滤,用来过滤掉对识别左上角标志区域帮助不大的颜色 //并且把滤出的图像保存到 binary里面 // Scalar()是具有三个参数的结构体 extractFeatureData(Mat txtImage) 方法的作用是证件卡号识别的特征提取,获取卡号每个数字的黑色像素点特征,作为每个号码的特征和识别的重要依据。 服务器端还会对乘客发送过来的数据进行整理和分析,也可以将“人车不符”数据和位置信息发送给合规部门。 ? 下图是“人车不符”情况发生的地区热力图: ?
基于opencv库和tess-two,Zxing在android平台上实现身份证号的识别! 实现原理分析 :通过zxing库捕捉相机获得图像,或者从相册里获取图片,再对图像进行处理. 最后将sdk目录中的native的libs里的文件复制到主工程的main里的jniLibs目录下,jniLibs目录需自己创建.这样opencv库就装载成功了! 2. tesseract库的使用,本文章不对tesseract如何编译做详细介绍,可以使用tess-two,有编译好的,解压的后,把Jar文件添加到项目,把libs目录的文件复制到jniLibs目录下这样 语言包的放置,可以从tesseract-ocr的官网下载中文的或者英文的,但是针对只是身份证号的识别,打算自己训练,官方下载的语言包文件都过大,本篇文章不对如何训练做详细介绍. 4. zxing库的引用 (ICPretreatment.doICPretreatmentTwo(bitmap)); //返回有效 行识别结果 } 先加载语言包文件,将assets目录下的语言包文件保存到sd目录下,再对源图像进行比例方法缩小
学习KNN(一) 图像分类与KNN原理 学习KNN(二)KNN算法手写数字识别的OpenCV实现 学习KNN(三)KNN+HOG实现手写数字识别 简介 在OpenCV的安装文件路径/opencv/sources ); imwrite(ad,tmp); } } return 0; } 截取之后每个以数字命名的文件夹内就都有500张图片了,需要注意的是 OpenCV的imwrite是没有自动创建文件夹功能的,所以路径应该提前存在。 在之前,我们已经把5000张图分别放进了10个文件夹里了,现在我们把其中的每个类别中前400张拿出来做训练数据,其余的测试,代码如下: #include <iostream> #include <opencv2 最后是一些个人想法,为什么KNN在手写数字的数据库中表现优异,我觉得主要是因为图像较简单,数字在图像中的位置很规则,都在中间,这两个特点非常利于KNN做距离的计算。
Mat对象 Mat是OpenCV中用来存储图像信息的内存对象; 当通过Imgcodecs.imread()方法从文件读入一个图像文件时,imread方法就会返回Mat对象实例; 或者通过Utils.bitmatToMat 下图形象地展示了一张图像中的各个像素点数据是如何存储的, 因为图像本身的像素点比较多,下图显示的图像像素数据只是图片左上角20×20大小的部分数据: ? ---- 1.2 Mat创建与初始化 综上,Mat对象中包含了图像的各种基本信息与图像像素数据; Mat是由头部与数据部分组成的,其中头部还包含一个指向数据的指针。 ---- 2.1 图像文件与资源加载 在Android系统中, 可以把给定图像的文件路径或者图像资源ID作为参数, 通过调用API来实现文件加载,使目标图片成为一个Bitmap实例对象。 BGR顺序, 这也是OpenCV加载图像文件为Mat对象的时候使用的默认通道数与通道顺序。
经过自己的测试,Android利用NDK方式实现稠密光流还是可以的,不过和我在《C++ OpenCV视频操作之稠密光流对象跟踪》里提到过的,稠密光流算法(即图像上所有像素点的光流都计算出来),由于要计算图像上所有点的光流 创建C++文件 我们在CPP下面新建了opticalflow的头文件和源文件 ? 头文件中两个方法,一个是native-lib中调用的方法,一个是在源图上进行绘制的方法 ? ? Opticalflow.cpp 定义两个Mat,一个是上一帧的灰度图,一个是稠密光流处理的数据。 ? 绘制结果函数 ? 外部调用稠密光流的方法 ? ,但是我们这个Demo中显示的图像只有一个,摄像头也随时可以移动,所以用那篇中只对比第一帧的情况是不行的,所以我这里改为都是当前帧对比前一帧的数据。 定义数据 Mat flowdata; //绘制结果的函数 void opticalflow::drawcalcFlowHF(Mat &flowdata, Mat &image, int step) {
在构造方法中配置StereoBM算法的一下参数,有些参数是相机标定的参数,具体用法参考《双目摄像头测量距离》这篇文章。 更加这篇教程,完成修改StereoBM算的相机标定的参数。 (rec, R); //Rodrigues变换 //图像校正之后,会对图像进行裁剪,这里的validROI就是指裁剪之后的区域 在MainActivity.java中,简单几步就完成了双目测距,在使用OpenCV之前一定要执行OpenCVLoader.initDebug(),然后读取assets文件夹中的图像,分别是是左右目拍摄保存的图像 计算完成之后,为了方便查看图像中的距离,把结果图在ImageView上显示,然后为ImageView添加点击获取坐标事件。 ,使用StereoBMUtil工具类读取分割后的左右目摄像头的图像执行计算,把结果图在ImageView上显示,然后为ImageView添加点击获取坐标事件。
雾天退化模型 之前在介绍何凯明博士的暗通道去雾论文OpenCV图像处理专栏六 | 来自何凯明博士的暗通道去雾算法(CVPR 2009最佳论文)的时候已经讲到了这个雾天退化模型,我们这里再来回顾一下。 模型表达式为: 其中,是图像像素的空间坐标,是观察到的有雾图像,是待恢复的无雾图像,表示大气散射系数,代表景物深度,是全局大气光,通常情况下假设为全局常量,与空间坐标无关。 已知的条件有: 根据(4)和(5)推出: 因此初略估计透射率的计算公式: 最后为了保证图片的自然性,增加一个参数来调整透射率 : 好了,上面复习完了何凯明博士的暗通道去雾,我们一起来看看清华大学这篇论文 一些推导 我们知道去雾的步骤主要就是估计全局大气光值和透射率,因此,本文就是根据输入图像估计和(这篇论文使用了来代替),然后根据雾天退化模型求取去雾后的图像。 为了防止去雾后图像出现整体画面偏暗,这里根据图像的均值来调整,即: 其中是中所有元素的均值,是调节因子。 因此可以得到透射率的计算公式: 结合公式(1)推出: 。
本文之前可以参看笔者写的几篇图像处理的文章,将会有助于更深入了解harris角点检测的实现。 2) 数学模型 根据上述的算法思想,可以构建数学模型,图像窗口平移[u,v]产生灰度变化E(u,v)为: ? 其中w(x,y)是一种加权函数,几乎所有的应用都把它设为高斯函数。 根据上述原理,Harris图像角点检测算法的关键是计算M矩阵,M矩阵是图像I(x,y)的偏导数矩阵,也就是要先求出图像的梯度。 1) 详细步骤 1.计算图像I(x,y)在X,Y方向的梯度。 在这里是通过卷积函数filter2D实现的,具体原理可以看(1)中提到的相关文章。 在这里非最大值抑制是通过图像膨胀的实现的。比较膨胀前后的响应值矩阵,得到局部最大值。
// histSize表示这个直方图分成多少份(即多少个直方柱),就是 bin的个数 MatOfInt histSize = new MatOfInt(25); // 只要头像区域的数据 hue通道数据中计算反向投影。 (); } 接下来是output方法,定义了拿到每一帧视频数据后做什么事情,这里调用了detectService.convert检测人脸并识别性别,然后在本地窗口显示: @Override /boling_cavalry/75121158,我这里下载后放在:C:\study\javacv\lib\opencv_java453.dll 人脸检测的模型文件,在GitHub下载,地址是:https /blog_demos.git 该项目源码的仓库地址,ssh协议 这个git项目中有多个文件夹,本篇的源码在javacv-tutorials文件夹下,如下图红框所示: javacv-tutorials
给定平面中的一组点,三角测量指的是将平面细分为三角形,将点作为顶点。在图1中,我们在左图像上看到一组界标,以及在中间图像中的三角测量。 DelaunayCore类中,在获取三角形还有插入矩形点里都用到了泛型模版,主要原因也同上面一样,获取到人脸68个特征点的数据为vector<Point2f>,而凸包的数据为vector<Point>, 如果按两个不同的类型计算获取三角形,就要写两个函数,这里直接用泛型的方式就直接写一个函数同时调用即可。 在泛型模版中要注意的问题就是实现的函数方法也要写在头文件.h中,而无法写入.cpp,因为模版需要单独编译,模板是实例化式多态。当然也可以在头文件中声明模板,在一个模板文件中实现那些类。 然后在头文件的尾部包含具体实现的文件,如:#include “xxxx.cpp” 。
API,返回/输出的是一个与输入图像大小一致的Mat对象, 这个Mat对象的每一个坐标(i,j)都是对应输入图像对应坐标(i,j)的像素的响应值R, 要先将这个Mat对象归一化, 再循环每一个Mat 基于角点周围的像素块生成特征描述子可以更好地表述图像特征数据。 本文首先笔记如何提取图像的角点特征。 1 Harris角点检测 关于角点特征提取最经典的算法之一就是Harris角点检测。 本章完整代码在文末GitHub里边的Feature2dMainActivity.java文件中,后续对此不再说明。 ,用灰度图像; corners:输出得到角点数组,注意数据类型; maxCorners:表示获取前N个最强响应R值的角点。
实现DNN的人脸检测,需要先下载模型文件,在OpenCV的\sources\samples\dnn\face_detector目录下,有一个download_weights.py脚本文件,可以通过Pycharm blobFromImage 3 setInput 4 forward 01 readNetFrom 根据我们用的模型不同改为不同的函数,后面的参数就是加载模型文件 //Tensorflow cv:: const Size & size = Size(), //返回的Mat中数据的尺寸 const Scalar & mean = Scalar(), //关于mean crop = false, //裁剪标志,指示是否在调整大小后裁剪图像 int ddepth = CV_32F //图像的数据类型,目前仅支持32F和8U ) 03 setInput , 创建项目 新建一个C++的项目,配置OpenCV可以看《VS2017配置OpenCV通用属性》,然后把我们需要用的模型文件和要检测的图片拷贝进去 ?
上面的GIF图中可以看出来,除了第一张多人里面有侧脸的,检测特征点时有点差,基本检测的都还挺不错。文章最后有Demo的GitHub源码地址。 以前的Demo中只是加载了一张图片,这次是直接加了一个目录下的文件。定义了文件目录后,使用cv::glob的函数可以把所有的文件名存放到vector<string>的变量里。 05 关于图像缩放的问题 ? ? 上面两个图中可以看到,像素差别好大,如果不用缩放的话,第二张图只能看到左上角的图片,为了解决这个问题,所以写了一个函数用于处理图像绽放的问题。 # 图像缩放思路 1 设定横向图像的最大宽度、纵向图像的最大高度 2 根据输入的图像判断是横向还是纵向 3 横向如果宽度超过最大宽度,按最大宽度除当前宽度算出比例,然后进行Resize的缩放(纵向就是高度超过最大高度处理 里面的LBF模型文件还有DNN的模型文件都在代码里面。 源码地址 https://github.com/Vaccae/OpenCVDnnfacedecet.git
前言 前面的文章《Android通过OpenCV和TesserartOCR实时进行识别》我们已经搭好一个利用NDK方式实时处理摄像头数据的程序了,今天我们就在看看OpenCV中通过级联方式实时进行人脸检测 haarcascade_frontalface_alt2.xml 级联检测的数据文件,这个文件是OpenCV已经训练好的数据,我们直接拿来就可以用,文件在OpenCV的源码下的data\haarcascades 文件夹下,网上也可以找到这个文件的下载链接。 找到文件后我们需要把这个文件存放到Android项目的资源文件下,在res下新建一个raw的类型 ? ? 加载训练文件,这里单独列出加载训练文件是因为我们打开摄像头时就先加载过来,后面直接进行检测即可,如果每一帧都要重新加载,被影响速度。 ?
Mat对象起源: 当OpenCV 1.0发布时候没有Mat对象,是个C语言风格的数据结构IPlImage来表示内存中图像对象,但是OpenCV开发者在做复杂图像处理算法分析与计算时候,创建了很多IplImage 它是C++风格的数据结构,自动实现内存分配与回收,这样OpenCV开发者就再也不用担心因为使用OpenCV的图像对象数据结构而导致内存泄漏问题了。 ()方法需要传入String类型的值,一般都是图像文件路径。 Mat对象只会复制头部分和指向像素数据的指针,不会真正复制数据部分。 Mat作为OpenCV 2.0之后推出新图像内存对象数据结构,是每个学习OpenCV的开发者都必须熟知与掌握的基本API知识点。
像素读写 Mat作为图像容器,其数据部分存储了图像的像素数据,我们可以通过相关的API来获取图像数据部分; 在获取图像数据的时候,知道Mat的类型与通道数目关重要, 根据Mat的类型与通道数目,开辟适当大小的内存空间 默认情况下,imread方式将Mat对象类型加载为CV_8UC3, 本系列笔记跟随原著默认提到的加载图像文件均为Mat对象、类型均为CV_8UC3、通道顺序均为BGR。 px的一个channel而已; 1.2 从Mat中每次读取一行像素数据 首先需要定义每一行像素数据数组的长度,这里为图像宽度乘以每个像素的通道数目。 ,这里为图像宽度×图像高度×通道数目, 然后一次性获取全部像素数据, 即get的前面两个参数row=0、col=0,表示从第一个像素的第一个channel开始读取。 , 然后再合并, 最后通过Android ImageView组件显示结果, 如此便是图像通道分离与合并的基本用法; 2.2 .均值与标准方差计算与应用 接下来的内容是关于图像Mat像素数据的简单统计
自定义模板OCR基于业界领先的深度学习技术和图像处理技术,提供针对任意固定版式的卡证票据的结构化识别能力,产品可由用户建立键值对应关系自主定制模板,提升信息数据的提取和录入效率。
扫码关注云+社区
领取腾讯云代金券