
图像学习
Jmlly
这个作者很懒,什么都没留下…
展开
-
opencv学习笔记(二)图像简单读取和显示,并简单修改和保存
1.读取显示图像建立好WIN32工程,具体代码如下:#include "stdafx.h"#include <opencv2/opencv.hpp>#include <iostream>#include <math.h>using namespace std;using namespace cv;//读取显示图像int main(){...原创 2019-07-07 20:18:40 · 343 阅读 · 1 评论 -
opencv学习笔记(二十一)霍夫变换-直线
1.基本概念(1)Hough Line Transform用来做直线检测,前提是已经完成边缘检测(最常用的就是canny检测)。(2)数学计算概念:平面空间到极坐标空间转换x,y为像素坐标,该公式的演变如下:因此可以通过像素坐标,再加上的变化,可以得出极坐标的图像,一个像素坐标对应极坐标系的一条曲线。详细如下:多个曲线在一点重合,说明这几点存在相同的r和thet...原创 2019-07-19 09:43:12 · 320 阅读 · 0 评论 -
opencv学习笔记(二十二)霍夫变换-圆
1.概念公式原理:其中(a,b)为圆心坐标。霍夫变换检测圆形的原理跟检测直线的原理是一样的。圆的表达式为(x-a)^2+(y-b)^2=r^2, 把问题转换成在求解经过像素点最多的 (a,b,r) 参数对。发现(a,b,r)的参数空间特别大,一般使用霍夫梯度法来解决圆的变换。如果我们对一个圆求梯度,那么圆上所有的点的梯度的方向均朝向圆心基于此有如下原理:(1...原创 2019-07-19 10:30:44 · 454 阅读 · 0 评论 -
opencv学习笔记(十七)图像边缘处理
1.边缘问题图像卷积的时候边界像素,不能被卷积操作,原因在于边界像素没有完全跟kernel重叠,所以当3x3滤波时候有1个像素的边缘没有被处理,5x5滤波的时候有2个像素的边缘没有被处理。2.处理方法在卷积开始之前增加边缘像素,填充的像素值为0或者RGB黑色,比如3x3在四周各填充1个像素的边缘,这样就确保图像的边缘被处理,在卷积处理之后再去掉这些边缘。openCV中默认的处理方法是:...原创 2019-07-17 09:54:33 · 568 阅读 · 0 评论 -
opencv学习笔记(十八)图像边缘提取-Sobel算子
1.边缘提取概念(1)像素值发生跃迁的地方,是图像的显著特征之一,在图像特征提取、对象检测、模式识别等方面都有重要的作用。(2)对图像求它的一阶导数delta = f(x) – f(x-1), delta越大,说明像素在X方向变化越大,边缘信号越强,有可能为正,有可能为负数,导数(即斜率)。(还有一种像素从高到低跃迁,个人理解)2.Sobel算子(1)水平梯度:(2)...原创 2019-07-17 10:29:00 · 733 阅读 · 0 评论 -
opencv学习笔记(三十一)轮廓周围绘制圆形和矩形框
1.相关API(1)approxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed),主要功能是把一个连续光滑曲线折线化,对图像轮廓点进行多边形拟合,减少轮廓点curve:图像的轮廓点组成的点集approxCurve:表示输出的多边形点集epsilon:主要表示输出的精...原创 2019-07-24 11:25:48 · 600 阅读 · 0 评论 -
opencv学习笔记(二十三)图像的像素重映射
1.重映射概念把输入图像中各个像素按照一定的规则映射到另外一张图像的对应位置上去,形成一张新的图像。注意是位置的改动,像素值不变。2.API介绍void remap(InputArray src, OutputArray dst, InputArray map1, InputArray map2,int interpolation, intborderMode = BORDER_CO...原创 2019-07-20 10:02:14 · 424 阅读 · 0 评论 -
opencv学习笔记(二十四)直方图均衡化
1.直方图概念图像直方图,是指对整个图像像在灰度范围内的像素值(0~255)统计出现频率次数,据此生成的直方图,称为图像直方图-直方图。直方图反映了图像灰度的分布情况。是图像的统计学特征。均衡化:是一种提高图像对比度的方法,拉伸图像灰度值范围。2.API介绍equalizeHist(InputArray src,OutputArray dst)src:输入图像,必须是8-b...原创 2019-07-20 10:19:28 · 196 阅读 · 0 评论 -
opencv学习笔记(二十五)直方图计算
1.基本概念(1)bin指的是直方图每个级数范围,可以每个数为一个级别,也可以一个范围为一个级别统计频率,一个级别为一个bin。(2)dims 表示维度,对灰度图像来说只有一个通道值dims=1(3)range 表示值得范围,灰度值范围为[0~255]之间(4)对图像梯度、每个像素的角度、等一切图像的属性值,我们都可以建立直方图。这个才是直方图的概念真正意义,不过是基于图像像素灰度...原创 2019-07-21 15:35:39 · 324 阅读 · 0 评论 -
opencv学习笔记(二十六)直方图比较
1.概念介绍对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间,然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度进,而比较图像本身的相似程度。Opencv提供的比较方法有四种:(1)Correlation 相关性比较(CV_COMP_CORREL)计算规则:其中,N为bin的个数。两幅图像越相似则计算出的值接近1。(2)Chi-Square 卡...原创 2019-07-21 16:09:34 · 174 阅读 · 0 评论 -
opencv学习笔记(二十七)直方图反向投影
1.反向投影概念(1)反向投影:反映直方图模型在目标图像中的分布情况,用直方图模型去目标图像中寻找是否有相似的对象。通常用HSV色彩空间的HS两个通道直方图模型。(2)API生成步骤:建立直方图模型计算待测图像直方图并映射到模型中从模型反向计算生成图像2.实现步骤和相关API介绍(1)实现步骤:加载图片imread将图像从RGB色彩空间转换到HSV色彩空间cvt...原创 2019-07-22 12:43:19 · 175 阅读 · 0 评论 -
opencv学习笔记(二十八)模板匹配
1.模板匹配概念模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域。所以模板匹配首先需要一个模板图像T(给定的子图像)另外需要一个待检测的图像-源图像S工作方法,在带检测图像上,从左到右,从上向下计算模板图像与重叠子图像的匹配度,匹配程度越大,两者相同的可能性越大。2.匹配算法分别是:计算平方不同、计算归一化平方不同、计算相关性、计算归一化相关性、计算相关系数、计...原创 2019-07-22 15:07:26 · 342 阅读 · 0 评论 -
opencv学习笔记(二十九)轮廓发现
1.基本概念轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法,所以边缘提取的阈值选定会影响最终轮廓发现结果。2.步骤和相关API(1)步骤:输入图像转为灰度图像cvtColor使用Canny进行边缘提取,得到二值图像使用findContours寻找轮廓使用drawContours绘制轮廓(2)轮廓发现API:cv::findContours(InputOutput...原创 2019-07-23 10:54:39 · 323 阅读 · 0 评论 -
opencv学习笔记(三十)凸包
1.凸包概念在一个多变形边缘或者内部任意两个点的连线都包含在多边形边界或者内部。包含点集合S中所有点的最小凸多边形称为凸包。使用Graham扫描算法。2.Graham算法首先选择Y方向最低的点作为起始点p0从p0开始极坐标扫描,依次添加p1….pn(排序顺序是根据极坐标的角度大小,逆时针方向)对每个点pi来说,如果添加pi点到凸包中导致一个左转向(逆时针方法)则添加该点...原创 2019-07-23 15:11:22 · 462 阅读 · 0 评论 -
opencv学习笔记(三十二)Harris角点检测
1.角点检测的意义参考这篇博文:https://blog.youkuaiyun.com/pbymw8iwm/article/details/82624898基于特征的图像配准方法是图像配准中最常见的方法之一。一类重要的点特征:角点(corner points),其定义主要有以下:局部窗口沿各方向移动,灰度均产生明显变化的点 图像局部曲率突变的点 典型的角点检测算法:Harris角...原创 2019-08-13 14:07:16 · 358 阅读 · 0 评论 -
opencv学习笔记(三十三)Shi-Tomasi角点检测
1.检测原理(1)与Harris角点检测基本一致,但是,最后的计算角点响应时使用的公式有所不同,不同如下:Shi-Tomasi角点检测采用的是较小特征值来确定R(2)如果高于阈值的,就被认为是角。如果我们在λ1 - λ2空间里画出来,得到的图像是:2.相关APIvoid cv::goodFeaturesToTrack( InputArray image, Output...原创 2019-08-13 16:20:54 · 338 阅读 · 0 评论 -
opencv学习笔记(八)绘制图形和文字
1.常用图形相关API解释(一般都有重载,下面只介绍每个其中一种)(1)直线:void line(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0)img:要绘制线段的图像。pt1::线段的起点。pt2: 线段的终点。c...原创 2019-07-12 11:11:45 · 327 阅读 · 0 评论 -
opencv学习笔记(七)图像亮度与对比度调整
1.相关概念调整图像亮度和对比度属于像素变换-点操作:相关的API即笔记(五)中提及的像素改变API。2.代码实现#include "stdafx.h"#include <opencv2/opencv.hpp>#include <iostream>#include <math.h>using namespace std;using...原创 2019-07-12 10:07:54 · 375 阅读 · 2 评论 -
opencv学习笔记(三)掩膜操作
1.掩膜概念掩膜是一种图像滤镜的模板,实用掩膜经常处理的是遥感图像。当提取道路或者河流,或者房屋时,通过一个n*n的矩阵来对图像进行像素过滤,然后将我们需要的地物或者标志突出显示出来。这个矩阵就是一种掩膜。即掩膜用来提升图像的对比度。2.矩阵实质概念掩膜操作实现图像对比度调整:红色是中心像素,从上到下,从左到右对每个像素做同样的处理操作,得到最终结果就是对比度提高之后的输出图像Mat对...原创 2019-07-09 11:03:56 · 781 阅读 · 0 评论 -
opencv学习笔记(四)Mat对象
1.opencv中的Mat基本概念Mat对象OpenCV2.0之后引进的图像数据结构、自动分配内存、不存在内存泄漏的问题,是面向对象的数据结构。分了两个部分,头部与数据部分。2.Mat对象构造函数与常用方法详细的解释参考:https://blog.youkuaiyun.com/maweifei/article/details/51221259#commentBox3.代码实现#inc...原创 2019-07-09 15:02:22 · 213 阅读 · 0 评论 -
opencv学习笔记(九)图像的模糊降噪1
1.相关概念原理:Smooth/Blur 是图像处理中最简单和常用的操作之一。使用该操作的原因之一就为了给图像预处理时候减低噪声,使用Smooth/Blur操作其背后是数学的卷积计算,通常这些卷积算子计算都是线性操作,所以又叫线性滤波。卷积操作过程方向:从左向右,从上向下2.常见方法原理均值模糊:归一化盒子滤波(均值滤波)高斯模糊:高斯滤波使用高斯模糊去模糊图像更加...原创 2019-07-13 09:56:51 · 583 阅读 · 0 评论 -
opencv学习笔记(十)图像模糊降噪2
1.相关概念中值模糊:统计排序滤波器,对椒盐噪声有很好的抑制作用。将内核中的像素值从小到大排列,取中间值代替锚点值。缺点是:均值模糊无法克服边缘像素信息丢失缺陷。原因是均值滤波是基于平均权重。双边模糊:双边模糊 – 是边缘保留的滤波方法,避免了边缘信息丢失,保留了图像轮廓不变。2.相关API介绍中值模糊:medianBlur(Mat src, Mat dest, ksize):这个...原创 2019-07-13 11:04:20 · 338 阅读 · 0 评论 -
opencv学习笔记(十一)图像的膨胀与腐蚀
1.原理形态学操作:图像形态学操作 – 基于形状的一系列图像处理操作的合集,主要是基于集合论基础上的形态学数学形态学有四个基本操作:腐蚀、膨胀、开、闭膨胀与腐蚀是图像处理中最常用的形态学操作手段膨胀:跟卷积操作类似,假设有图像A和结构元素B,结构元素B在A上面移动,其中B定义其中心为锚点,计算B覆盖下A的最大像素值用来替换锚点的像素,其中B作为结构体可以是任意形状。注意膨胀...原创 2019-07-14 11:37:36 · 252 阅读 · 0 评论 -
opencv学习笔记(十二)形态学操作
1.常见形态学操作(膨胀与腐蚀以外的)(1)开操作-open先腐蚀后膨胀可以去掉小的对象,去掉一些小区域的颜色较亮区域(使用黑白的斑点图片,效果明显)(2)闭操作-close先膨胀后腐蚀可以填充小的洞(fill hole),去掉或填补颜色暗淡或者黑色小区域(3)形态学梯度-Morphological Gradient膨胀减去腐蚀,又称基本梯度(用处不是很明白,但是输...原创 2019-07-14 12:43:23 · 292 阅读 · 0 评论 -
opencv学习笔记(十三)形态学操作-水平线与垂直线的提取
1.基本原理水平线与垂直线的提取本质是:先腐蚀后膨胀,即开操作。2.提取步骤输入图像彩色图像 imread转换为灰度图像 – cvtColor转换为二值图像 – adaptiveThreshold(将分离目标区域和背景区域)定义结构元素开操作 (腐蚀+膨胀)提取 水平与垂直线3.自适应阈值API和原理(这是采用平均的阈值算法)void adapti...原创 2019-07-15 09:55:18 · 426 阅读 · 0 评论 -
opencv学习笔记(十四)阈值操作
1.阈值概念阈值即界限,在图像学中,它把图像进行分割,凸显出想要的区域。常用于图像二值化。2.常见操作(1)阈值二值化-threshold binary(2)阈值反二值化-threshold binary Inverted(3)截断-truncate(4)阈值取0-threshold to zero(5)阈值反取0-threshold to zero I...原创 2019-07-15 10:22:32 · 244 阅读 · 0 评论 -
opencv学习笔记(五)读写像素、修改像素值
1.相关API理解读一个GRAY像素点的像素值:intintensity = img.at<uchar>(y, x); 或者 int intensity = img.at<uchar>(Point(x, y));其中y,x分别针对图像的row与col。Vec3b与Vec3F解释:Vec3b对应三通道的顺序是blue、green、red的uch...原创 2019-07-11 10:33:26 · 478 阅读 · 0 评论 -
opencv学习笔记(六)图像混合
1.线性混合概念全新的像素值为一个常数系数(0~1)乘以第一个图像的像素值,加上另一个常数系数(与第一个常数相加为1)乘以第二个图像像素值。2.相关API介绍addWeighted():参数1:输入图像Mat – src1参数2:输入图像src1的alpha值参数3:输入图像Mat – src2参数4:输入图像src2的alpha值参数5:gamma值参...原创 2019-07-11 11:42:14 · 189 阅读 · 0 评论 -
opencv学习笔记(十九)图像边缘提取-Laplance算子
1.基本理论在二阶导数的时候,最大变化处的值为零即边缘是零值。通过二阶导数计算,依据此理论我们可以计算图像二阶导数,提取边缘。2.矩阵算子和处理流程(1)Laplance算子如下:(2)处理流程如下:高斯模糊 – 去噪声GaussianBlur()转换为灰度图像cvtColor()拉普拉斯 – 二阶导数计算Laplacian()取绝对值convertScal...原创 2019-07-18 09:21:47 · 713 阅读 · 0 评论 -
opencv学习笔记(二十)Canny边缘检测
1.原理个人觉得和Sobel算子差不多,不过其对高低阈值又进行了一个控制,下面介绍。2.相关APICanny(InputArray src,OutputArray edges,double threshold1,double threshold2,int aptertureSize,bool L2gradient ) 参数1:8-bit的输入图像参数2:输出边缘图像, 一般都是...原创 2019-07-18 09:47:32 · 274 阅读 · 0 评论 -
opencv学习笔记(一)工具配置和工程创建
1.工具安装电脑操作系统版本:WIN10;选择工具和版本:Visual Studio 2015+OpenCV 3.2.0;百度云安装包(或者去官网个人选择版本):链接:https://pan.baidu.com/s/1jGbdWMtV04J--wJz6igkyQ提取码:4qa3如果选择百度云,参考安装:https://blog.youkuaiyun.com/guxiaonuan/arti...原创 2019-07-07 19:33:57 · 244 阅读 · 0 评论 -
opencv学习笔记(十五)图像上采样与降采样
1.图像金字塔概念(1)我们在图像处理中常常会调整图像大小,最常见的就是放大(zoom in)和缩小(zoom out),一个图像金字塔式一系列的图像组成,最底下一张是图像尺寸最大,最上方的图像尺寸最小,从空间上从上向下看就想一个古代的金字塔。(2)常见金字塔:高斯金子塔 – 用来对图像进行降采样拉普拉斯金字塔 – 用来重建一张图片根据它的上层降采样图片2.高斯金字塔与高斯不同...原创 2019-07-16 09:52:03 · 329 阅读 · 0 评论 -
opencv学习笔记(十六)自定义线性滤波
1.图像中的卷积概念卷积:图像处理中一个操作,是kernel在图像的每个像素上的操作。Kernel本质上一个固定大小的矩阵数组,其中心点称为锚点(anchor point)。把kernel放到像素数组之上,求锚点周围覆盖的像素乘积之和(包括锚点),用来替换锚点覆盖下像素点值称为卷积处理。前面笔记中的掩膜操作本质就是进行卷积处理。2.常见算子(kernel)(1)Robert算子...原创 2019-07-16 10:18:07 · 236 阅读 · 0 评论 -
opencv学习笔记(三十四)自定义角点检测
1.步骤(1)定义好Harris角点检测与Shi-Tomas角点检测需要的变量,存放响应值的矩阵以及滑块响应函数(2)源图像灰度处理(3)Harris使用cornerEigenValsAndVecs函数,获取特征值;Shi-Tomas使用cornerMinEigenVal函数获取特征值(4)公式计算响应值:Harris为:lamda1*lamda2 - k*(lamda1 + l...原创 2019-08-15 14:24:55 · 329 阅读 · 0 评论