Machine Vision
Dynamicw
菜鸟起飞
展开
-
ubutnu16.04下Intel Realsense D435驱动的安装和python环境的配置
ubutnu16.04下Intel Realsense D435驱动的安装和python环境的配置一、 Intel Realsense D435驱动的安装普遍操作:这里就复制别人的:1、Register the server's public key:sudo apt-key adv --keyserver keys.gnupg.net --recv-key C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu原创 2020-12-14 17:13:31 · 724 阅读 · 0 评论 -
OpenCV中鼠标交互-绘制矩形框
OpenCV中鼠标交互-绘制矩形框·具体流程:1、绑定回调函数2、在回调函数中检测触发的事件3、根据不同事件做出不同动作一、绑定回调函数cv2.setMouseCallback('origianl',click_event)'origianl’为窗体的名字,client_event为回调函数的函数名二、在回调函数中检测触发的事件回调函数的的参数为固定格式:第一个参数event:事件类型x:为坐标xy:为坐标yflags:为鼠标滚轮的方向param:为传入参数def click原创 2020-09-24 21:53:41 · 2035 阅读 · 0 评论 -
OpecCV颜色分割
颜色分割普通读取的图片都是RGB格式,就意味着每种颜色都是由三种RGB组合而成。同样的常用的格式还有HSV,具体的看下面的百度贴过来的:色调H用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,紫色为300°;饱和度S饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。原创 2020-09-22 14:57:08 · 314 阅读 · 0 评论 -
图像处理------图像细化
图像处理------图像细化算法流程参考自:图像处理细化算法参考博文中没有细化算法的代码实现,只有算法的具体流程,在本文中,使用python实现图像细化的代码实现,但其运行效率没有考虑,只为理解算法原理:算法原理步骤对二值图像进行细化,就是骨架提取,删除不需要的轮廓点,保留其骨架点。假设一个像素点,该点为p1,八邻域为p2->p9,通过考虑P1邻域的实际情况,以便决定是否删除P1点。假设处理的图像为二值图形,背景为黑色0,细化的前景为1.算法流程,分为两步,每步判断四个条件,然后决定像素点原创 2020-09-16 16:09:39 · 2336 阅读 · 1 评论 -
二值图像轮廓追踪算法
二值图像轮廓追踪算法主要分为两个方面,一个是算法的原理,二是算法的代码实现。这里为了实现方便选用python来对算法进行实现。一、算法原理对于二值图像来说,其中每一个像素不是255就是0,这里假设背景为255,前景为0,即在图像中找到黑色物体的轮廓。1、遍历二值图像找到其中某个黑像素,然后以此为开始点。2、将开始的8邻域分为8个方向,先从0向开始,如果0向的为黑像素,则将该点设置为当前像素,否则将方向加一(顺时针转45度),继续判断,直到有黑像素,若八个方向全部遍历都没有黑像素,则当前的开始点放弃原创 2020-09-15 16:11:27 · 4171 阅读 · 4 评论 -
OCR识别之图像预处理
OCR识别之图像预处理图像预处理之作用及效果图像预处理之操作图像预处理之源代码图像预处理之作用及效果无论是使用图像来做识别还是别的操作,都需要对图像做一定的预处理操作,预处理的作用是方便后续我们对图像的识别,分类等操作。对于OCR识别来说要达到的效果如下图:原始输入图像:预处理之后的图像:图像预处理之操作以本实例的图像来说,首先需要找到内部白色纸片的边界,通过边界找到它的轮廓信息。根据其轮廓信息,应用Opencv中的轮廓近似得到大致的矩形区域,然后通过计算得到该矩形区域的宽高和四个顶点的坐标原创 2020-06-30 16:34:27 · 4050 阅读 · 10 评论 -
银行卡号识别
银行卡号识别项目目标实现原理模板处理输入图片处理源码分析源码分析模板处理源码输入图片处理源码结果分析总结项目目标在该项目中找到两张银行卡如下:在该项目中,使用图像处理的基本知识,来识别出银行卡上的卡号。不同于现在使用的机器学习或者深度学习的方法来实现。实现的效果如下:实现原理在该项目中,使用图像处理的基本操作,如阈值操作,滤波操作,轮廓寻找,图像分割,模板匹配等知识实现银行卡号的准确识别。整个过程主要分为两大块,一是对于模板的选取,在两张银行卡号中选取一组0-9的模板,用于后期匹配的模板原创 2020-06-30 08:19:52 · 2167 阅读 · 0 评论 -
OpenCV中绘制外围矩形框和圆框
OpenCV中绘制外围矩形框和圆框利用边界寻找函数找到的边界坐标信息。然后利用每一条寻找到的边际信息去找到图形的矩形边界和圆形边界。一、 OpenCV中绘制外围矩形框根据已知的边界信息点。将边界信息传入提供的API函数得到该边界的矩形框。API:Rect boundingRect(Mat(输入点集));下面是具体的使用方法:void rec(int,void*){ Mat ou...原创 2019-11-01 10:26:47 · 706 阅读 · 0 评论 -
OpenCV中的凸包
OpenCV中的凸包凸包是指给定一个二维平面上的点集,凸包就是将这个点集最外层的点连接起来构成的凸多边形。上一节的找到图像的边界点的坐标信息,在此基础之上,进行凸包操作。具体流程:找到图像的轮廓边界坐标信息,存储在vector<vector> contours中,则每一个contours[i]代表了一条边际,即是一系列点的集合,然后,我们利用凸包的定义,在这个点集上找到凸包,遍...原创 2019-10-31 09:12:52 · 367 阅读 · 0 评论 -
OpenCV中图像轮廓检测
OpenCV中图像轮廓检测通过之前的Canny方法可以得到图像的边界,但是我们无法得到边界的数学信息。所以就有了今天的图像轮廓检测。在OpenCV中图像轮廓检测的API:findContours( 输入图像,单通道8位阈值化图像,也就是对应canny之后的图像。 输出点集,格式为Vector<vector<Point>> contours,每个向量包含多个向量,包...原创 2019-10-28 10:28:37 · 612 阅读 · 0 评论 -
OpenCV中的模板匹配
OpenCV中的模板匹配在该demo中选取了两张猴哥的照片,一张用来获得模板,另外一张用模板去匹配。下图为选取模板的图像:以下为选取的匹配模板:根据该模板在下面的图中找到猴哥的脸:该demo要实现的功能已经说完。下面就是实现过程中的一些细节。首先来说,模板匹配的原理:模板匹配就是两幅图像,将小的图像像个滑块一样在大的上面逐像素滑动,并且没滑动一次计算出此次小图像覆盖下的区域像素和该滑...原创 2019-10-25 15:57:23 · 1420 阅读 · 0 评论 -
OpenCV中反向投影
OpenCV中反向投影首先要说的可能要说的就是反向投影,用一个看到的例子来说可能更直观一些。[1234567891011129101315]\begin{bmatrix}1&2&3&4 \\ 5&6&7&8 \\ 9&10&11&12 \\ 9&10&13&15 \end{bmatrix}⎣⎢⎢⎡...原创 2019-10-25 13:34:41 · 461 阅读 · 0 评论 -
OpenCV中直方图对比
OpenCV中直方图对比对于两幅图片先求得其直方图然后在对两个直方图进行比较。而两幅直方图相似度的标准为d(H1,H2)\color{#f00}d(H1,H2)d(H1,H2),而对于该值的计算有四种方式:相关性比较卡方比较十字交叉性巴氏距离而对于OpenCV来说已经提供了相应的API:compareHist( 输入直方图1, 输入直方图2, 选择使用的计算方式);具体的...原创 2019-10-23 14:20:18 · 201 阅读 · 0 评论 -
OpenCV中直方图的计算和绘制
OpenCV中直方图的计算和绘制主要记录一下几个关键的API:split( 输入多通道图像, 数组或者vector变量。);计算直方图calcHist( &分割后的单通道图像, 输入数组的个数, 需要统计的通道索引, Mat()掩码 储存直方图的矩阵, 直方图的维数, &每个维度的bin数, &每个维度的取值范围, true, false...原创 2019-10-22 10:53:01 · 175 阅读 · 0 评论 -
OpenCV中直方图均衡化
OpenCV中直方图均衡化首先知道直方图是个什么鬼?在一幅图像中,直方图所体现的是每个像素值在所有的像素中所占的比例:例值为127的像素点的个数/图像总的像素点的个数\color{#f00}值为127的像素点的个数/图像总的像素点的个数值为127的像素点的个数/图像总的像素点的个数根据这个可以想到在比较 暗的图像中,直方图主要分布在0的附近,而在比较亮的图像中,直方图主要分布在255附近,为了...原创 2019-10-22 09:28:59 · 695 阅读 · 0 评论 -
OpenCV中的仿射变换
OpenCV中的仿射变换仿射变换:一个任意的仿射变换都能表示为 乘以一个矩阵 (线性变换) 接着再 加上一个向量 (平移).通常一个图像有三种变换:1、旋转2、平移3、缩放通常用2X3的矩阵来表示一个仿射变换:变换矩阵A=[a11a12a21a22]变换矩阵A=\begin{bmatrix}a_{11}&a_{12}\\a_{21}&a_{22}\end{bmatri...原创 2019-10-21 20:40:08 · 680 阅读 · 0 评论 -
OpenCV中重映射
OpenCV中图像重映射重映射的意思是:把一个图像中一个位置的像素放置到另一个图片指定位置的过程。新图像g(x,y)g(x,y)g(x,y)与原图像f(x,y)f(x,y)f(x,y)存在一个映射的关系。例如:f(x,y)→g(x,y)f(x,y)\to g(x,y)f(x,y)→g(x,y)假设对应法则为:h(x,y)=(I.cols−x,y)\color{#f00}h(x,y) = (...原创 2019-10-18 16:41:57 · 219 阅读 · 0 评论 -
OpenCV中霍夫圆检测
OpenCV中霍夫圆检测在直线检测中,变换后在r−θr-\thetar−θ空间内曲线交点,然后根据阈值来得到直线。在圆中需要有三个变量圆心坐标和半径,因此变换后的空间在三维空间,根据三维空间中的曲线的交点得到圆。这就是标准的霍夫圆变换。但这个变换涉及到计算量过于巨大,所以很难实际应用。在实际应用中常用的是:霍夫梯度法\color{#f00}霍夫梯度法霍夫梯度法。算法的原理:圆心一定在圆上每个点...原创 2019-10-18 15:08:10 · 708 阅读 · 0 评论 -
OpenCV中霍夫直线变换
OpenCV中霍夫直线变换首先要知道,一条直线的通用表达式为y=ax+b\color{#F00}y=ax+by=ax+b,a为直线的斜率,b为直线的截距,知道这两个参数可以唯一确定一条直线。通常我们往常我们求三个点,是否在一条直线上,我们让其两两组合分别求斜率和截距,如果一样,我们则说三个点在同一条直线。但是现在在我们的图像中无法使用这样的方法。y=kx+b\color{#f00}y=kx+b...原创 2019-10-17 19:12:49 · 210 阅读 · 0 评论 -
OpenCV中Canny边缘检测
OpenCV中Canny边缘检测具体的Canny边缘检测原理:1、消除噪声,使用高斯平滑滤波器卷积降噪2、计算梯度幅值和方向。利用Sobel滤波器。得到x和y方向的导数Gx和Gy计算梯度的幅值和方向:G = sqrt(Gx^2 + Gy^2)a = arctan(Gx/Gy)(梯度的方向近似到四个可能角度之一(一般0,45,90,135))3、非极大值抑制,这一步排除非边缘像素,...原创 2019-10-16 11:23:53 · 281 阅读 · 0 评论 -
Laplace算子
Laplace算子原理:之前的Sobel算子运算之后,得到图像的单方向的一阶导数。一阶导数的极值位置,二阶导数为0,所以利用这个特点来作为检测图像边缘的方法。但是,二阶导数的0值不仅仅出现在边缘(它们也可能出现在无意义的位置),但是我们可以过滤掉这些点。Laplace(f) = 对x的二阶偏导 + 对y的二阶偏导;鉴于这个算法实现难度有点大,水平有限。所以就先看一看api的使用:Lapl...原创 2019-10-15 10:48:40 · 775 阅读 · 0 评论 -
OpenCV中的Sobel算子
OpenCV中的Sobel算子刚开始第一次接触这个东西的时候也是感觉一脸懵逼,这是什么鬼。完全看不懂。今天再次接触到,感觉理解的透彻了一点。首先来看一下Sobel算子是个什么东西:-101-202-101这个就是Sobel算子中的一个,就以这个为例。可以看出来这个就是之前说的那个核。用这个核去和原图像进行卷积操作。那根据核可以知道,卷积过后得到的输出...原创 2019-10-14 13:36:50 · 759 阅读 · 0 评论 -
OpenCV中的随机数
OpenCV中的随机数记得之前说过:RNG rng(0xffffffff);int x = rng.uniform(0,255);用这种方式可以产生随机数,但是当多次运行时产生的随机数,不会发生该改变,这就不是我们想要的。所以今天说一下,可以每次产生不一样的随机数的方式。RNG rng((unsigned)time(NULL));int x = rng.uniform(0,255);...原创 2019-10-14 11:19:02 · 366 阅读 · 0 评论 -
自定义线性滤波
自定义线性滤波线性滤波器:将小滑块与图像做卷积,小滑块就是所谓的核,它是一个固定大小的数值数组。在该数组中有一个锚点,一般位于数组中央。如何将核与图像做卷积?将核的锚点放在特定的像素上,同时核内其他值与该像素邻域的各像素重合。将核内各值与对应的图像像素值相乘,然后相加,再将得到的结果放在与锚点对应的像素上。对图像中的所有像素都进行以上的操作。下面来看一下,对与三阶的手动实现:Mat ...原创 2019-10-14 11:14:07 · 187 阅读 · 0 评论 -
基本阈值操作
基本阈值操作首先来看api:threshold( 输入图像, 输出图像, 阈值, 图像中最大值, 类型);这个函数还是比较简单的,看一下类型这个参数:阈值二值化(THRESH_BINARY)遍历图像的所有像素,当大于设定阈值时,将像素改为最大值,否则令像素等于0;阈值反二值化(THRESH_BINARY_INV)遍历图像的所有像素,当大于设定阈值时,将像素改为0,否则令...原创 2019-10-12 14:03:42 · 399 阅读 · 0 评论 -
图像金字塔
图像金字塔像一个金子塔一样,向上图像变小,向下图像变大.在图像金子塔中,这个金子塔是倒立的,其实这样说也不准确,不过为了方便记住它的api,不然的话很容易弄反。金字塔 ------pyramid将图像变大pyrUp( 输入图像, 输出图像, Size(src.cols*2,src.rows*2));将图像变小pyrDown( 输入图像, 输出图像, Size(src.c...原创 2019-10-12 11:26:48 · 99 阅读 · 0 评论 -
形态学操作
形态学操作开操作对原图像进行先腐蚀后膨胀。用白色背景黑色前景的图片来说,对图像先进行腐蚀,小区域的白色将被消除,然后在膨胀,使得除了消除掉的部分还原为原来的样子主要用途:用来消除高像素值的小块闭操作对原图像进行先膨胀后腐蚀。还是利用白色背景黑色前景的图片来说,对图像先进行膨胀,小区域的黑色将被消除,然后再进行腐蚀,使得除了消除掉的部分还原为原来的样子。主要用途:用来消除低像素值的小块...原创 2019-10-12 10:11:54 · 115 阅读 · 0 评论 -
腐蚀和膨胀(erode and dilate)
腐蚀和膨胀在这两个操作中都需要有一个滑动窗口一样的小块,这个小块在整副图像上面进行一个像素一个像素的滑动。膨胀膨胀操作:当前像素值等于该小块覆盖下的图像区域的最大像素值。从而当背景色为白色,字体为黑色时,执行一次膨胀操作,黑色字体将变细。相关的api使用:Mat ele = getStructuringElement(MORPH_RECT,Size(3,3),Point(-1,-1))...原创 2019-10-11 14:09:02 · 635 阅读 · 0 评论 -
图像平滑处理
图像平滑处理四种常用的线性滤波器对图像进行平滑处理:1、归一化滤波器(Normalized Filter):某一像素的邻域内的所有像素求平均值,然后赋值给该像素。blur( 输入图像, 输出图像, 邻域大小Size(i,i), 中心点Point(-1,-1));2、高斯滤波器(Gaussian Filter):最有用的滤波器。将输入数组的每一个像素点与高斯内核卷积,卷积和当...原创 2019-10-10 21:08:53 · 337 阅读 · 0 评论 -
OpenCV傅立叶变换
对图像进行傅立叶变换首先按列(或者按行)进行傅立叶变换,得到一个变换的矩阵,然后再对变换的矩阵按行(或者按列)进行傅立叶变换,从而每个像素点可以得到一个复数相对应。具体的代码流程:第一步将读入的图片转成傅立叶变换速度最快的大小。Mat padded;int m = getOptimalDFTSize(src.rows);int n = getOptimalDFTSize(src.col...原创 2019-10-10 09:34:03 · 183 阅读 · 0 评论 -
OpenCV掩码、blending、改变对比度和亮度、随机发生器和绘图
掩码一般来说是对某个像素邻域内的几个像素进行相应的操作实现对图像的滤波等操作。0-10-15-10-10例如上面的这个掩码核,使用它来对整副图像进行操作。具体代码如下: const uchar* pre; const uchar* courrent; const uchar* next; for(int i = 1;i <...原创 2019-10-08 15:21:32 · 411 阅读 · 1 评论 -
MV(二)----modify and save Image
In the previous chapter,we learned how to read Image.In the chapter,we will discuss the most important machine vision.There are three step:read the Image into the computer. change the Image pixels ...原创 2019-03-22 19:08:29 · 173 阅读 · 0 评论 -
MV(一)----Load image
I am not good at the English.But I will use English to record the process of learn Computer Vision(CV).Today is the fisrt time to record the test,so let us to pratice a simple demo about how to read a...原创 2019-03-20 16:07:41 · 138 阅读 · 0 评论