绿小蕤

好逸恶劳,贪生怕死

  • 主页
  • 简介
  • 相册
所有文章 友链 学习履历

绿小蕤

好逸恶劳,贪生怕死

  • 主页
  • 简介
  • 相册

opencv(二)——imgproc

2018-08-14 2018-08-14 view 335 times

PS:具体代码参考opencv /samples里的源码

目录

  1. 平滑图像/模糊
  2. 腐蚀和膨胀
  3. 形态变化 :开运算 、闭运算 、形态梯度、 顶帽 、黑帽
  4. Hit-or-Miss 击中击不中
  5. 图像金字塔
  6. 二值化
  7. 线性滤波器
  8. 霍夫变换:着直线、找圆
  9. 重映射
  10. 仿射变换
  11. 直方图
  12. 模板匹配
  13. 轮廓查找
  14. 凸包
  15. 多边形拟合
  16. 矩


一、 平滑图像/模糊

  1. 模糊 cv :: blur
  2. 高斯平滑 cv :: GaussianBlur
  3. 中值滤波 cv :: medianBlur
  4. 双边滤波 cv :: bilateralFilter


二、腐蚀和膨胀

  1. 腐蚀 cv::erode 输出像素的值是原图被掩膜所覆盖的所有像素中取最小像素 腐蚀
  2. 膨胀 cv::dilate 输出像素的值是原图被掩膜所覆盖的所有像素中取最大像素 膨胀


三、 形态变化

cv :: morphologyEx
开运算 、闭运算 、形态梯度、 顶帽 、黑帽


四、 Hit-or-Miss 击中击不中

cv :: morphologyEx 函数有一个参数 MORPH_HITMISS 实现击中击不中

PS:知乎上的大神说就是一个完全的模板匹配过程 原理看这篇比较简单 https://blog.csdn.net/horseinch/article/details/50127955 但是结合具体找钥匙的应用,一下子就明白啥叫击中击不中,猛推这篇博文,简直一语戳醒我~~ 击中击不中变换是形态学中用来检测特定形状所处位置的一个基本工具 https://blog.csdn.net/jinshengtao/article/details/20707711


五、 图像金字塔

可以看浅墨大神写的 ~ ~ https://blog.csdn.net/poem_qianmo/article/details/26157633

图像金字塔是图像中多尺度表达的一种,是来源于同一张原始图的图像集合。 越向上层级越大,图像越小,分辨率越低,金字塔底部是高分辨率图像,而顶部是低分辨率的近似。

1. 图像金字塔和采样

  • 高斯金字塔:用来向下采样,从低层向上(这句话一定要看下面这张图理解)
  • 拉普拉斯金字塔: 将拉普拉斯金字塔理解为高斯金字塔的逆形式

向上采样:pyrUp

向下采样:pyrDown

PS:采样方向和金字塔方向相反(重要的事情不说三遍) 在这里卡了好久,金字塔的上下按照层级来,采样的上下按照尺寸来,直接上图吧,好理解~~

pryUp不是PryDown的逆操作。图像首先在每个维度上扩大为原来的两倍,新增的行(偶数行)以0填充,用指定的滤波器卷积,估计“丢失”像素的近似值。

pryDown( )是一个会丢失信息的函数。为了恢复原来更高的分辨率的图像,要获得由降采样操作丢失的信息,这些数据就和拉普拉斯金字塔有关系。

2. 图像金字塔的作用

图像压缩

图像金字塔构建尺度空间,用于目标检测

下面这篇博文提到了SIFT特征,没想到图像金字塔引出的尺寸空间这么有用~~

https://blog.csdn.net/xiaowei_cqu/article/details/8069548


六、阈值操作

  • cv :: threshold

  • cv :: inRange

    区别:两个函数都能实现二值化

    但是 inRange()可以同时针对多通道操作,使用起来非常方便


七、 线性滤波器

cv::filter2D


八、设置边框

cv::copyMakeBorder

除了字面上的添加边框外,还有一个实际用处,如果评估点位于图像的边缘,如何卷积图像? 大多数OpenCV功能是将给定的图像复制到另一个稍大的图像上,然后用上式自动填充边界

随机数生成器RNG uniform函数可以返回指定范围的随机数,gaussian函数返回一个高斯随机数,fill则用随机数填充矩阵 https://blog.csdn.net/zyttae/article/details/41719349


九、 霍夫变换

1.Hough Line变换 找直线

cv::HoughLines

cv::HoughLinesP

2.Hough Circle变换 找圆(圆心和半径)

cv::HoughCircles


十、重映射(Remapping)

cv::remap

重映射,重新映射,就是从图像中的一个位置获取像素并将它们定位在新图像中的另一位置的过程。为了完成映射过程,可能需要对非整数像素位置进行一些插值,因为在源图像和目的图像之间不一定存在一对一像素的对应关系。

https://blog.csdn.net/poem_qianmo/article/details/30974513


十一、仿射变换(Affine Transformations)

  1. 实现仿射: cv::warpAffine 可以实现平移(Translation)、缩放(Scale)、旋转(Rotation)

  2. 计算仿射矩阵的两种方法: cv::getRotationMatrix2D 根据三个系数center旋转中心 、angle旋转角度、 scale、缩放系数计算仿射矩阵

    cv::getAffineTransform 根据三个点的映射计算仿射矩阵

2 x 3的矩阵M来表示仿射变换

再上浅墨大神的教程~~ https://blog.csdn.net/poem_qianmo/article/details/33320997


十二、直方图

1.计算直方图

cv::split 将图像分割成对应的平面,将图像分解为R,G和B平面

cv::calcHist 来计算图像数组的直方图

cv::normalize 对数组进行归一化

2.直方图均衡化

对图像中像素个数多的灰度级进行展宽,像素个数少的灰度进行压缩,从而提高了对比度和灰度色调的变化,使图像更加清晰) cv::equalizeHis

3.直方图比较

使用不同的指标来比较直方图,两个直方图相互匹配的程度,提供了四种比较方法 cv::compareHist

4.反向投影

反向投影图是指图像的某一位置上像素值用对应在直方图的所属于的bin上的值来代替该像素值,不想看文字,可以看下面这篇博文的数学描述 https://blog.csdn.net/chenjiazhou12/article/details/22150421

PS:开始觉得这个反向投影能有啥用啊,如果你和我一样,看看下面,反向投影在定位上可是很有用~~ 反向投影用于在输入图像 (通常较大) 中查找特定的模板图像 (通常较小) 最匹配的点或者区域最亮。 cv::calcBackProject


十三、 模板匹配

通过滑动,从左到右,从上到下,在各个位置,比较模板和源图的匹配程度
矩阵R用于存放metric,即匹配好坏程度的值 ,R中(x,y)存放对应位置的匹配度量

cv::matchTemplate() 用来搜索模板和输入图像之间的匹配

cv::minMaxLoc() 用来查找R矩阵,即匹配好坏程度中的最大值和最小值(以及位置)


十四、轮廓查找

cv::findContours 查找轮廓

cv::drawContours 画轮廓


十五、凸包

凸包又叫凸壳,凸包能包含点集中所有的点,如果在集合A内连接任意两个点的直线段都在A的内部,则称集合A是凸形的。字面意思,就是一个多边型,没有凹的地方。

https://blog.csdn.net/keith_bb/article/details/70194073


十六、 多边形拟合

cv::approxPolyDP 对边缘轮廓进行多边形拟合

对于拟合后的轮廓求包围盒

http://www.cnblogs.com/mikewolf2002/p/3427079.html


十七、空间矩,中心矩,归一化中心矩,Hu矩

PS:关于矩的概念,若不想深究,只看公式,可以看下面这篇~~

  • 中心矩:平移不变性
  • 归一化中心矩:平移不变性,比例不变性
  • Hu矩:利用二阶和三阶中心矩构造七个不变矩,具有平移、缩放、旋转不变性

https://blog.csdn.net/kuweicai/article/details/79027388

cv::moments 计算图像的中心矩

cv::HuMoments 由中心矩计算Hu矩

cv::contourArea 计算轮廓面积

cv::arcLength 计算封闭轮廓或曲线长度


十八、判断点在多边形内部还是外部

cv::pointPolygonTest 返回值是图像中的该点到某轮廓的最短距离,通过返回值的正负,判断该点在这个轮廓里面还是外面


使用形态学操作来提取水平和垂直线,加水印的方法

(1) 形态学是一组图像处理操作,其基于预定义的也称为内核的结构元素来处理图像,两个最基本的形态操作是腐蚀和膨胀。 获得水平线,根据结构元素水平先腐蚀得到水平线,再膨胀加粗

同理,获得竖直线,只不过结构元素需要改变竖直 这种方法结构元素的大小和形状很关键,不然找直线还是用霍夫变换吧

​

(2) PS:这个程序里用到了 copyTo 加了个mask参数,查了一下,竟然是一种做水印的方法!!神奇~~ src.copyTo(dst) src.copyTo(dst, mask) 原理:src为水印图片,mask作为一个掩模板,mask在(i, j)其值为1,则把src.at(i, j)处的值直接赋给dst.at(i, j) mask在(i, j)其值为0,dst.at(i, j)处保留其原始像素值 (mask 可以由src 经过阈值化得到,mask为1的地方就是水印src需要加上去的地方,mask为0的地方,就是水印src,即原图dst不会被掩盖) 水印案例:可以参考下面这个博文~~ http://www.cnblogs.com/xianglan/archive/2011/07/30/2122186.html

  • opencv

扫一扫,分享到微信

微信分享二维码
opencv(三)——绘图
opencv(一)——HighGUI
  1. 1. 目录
  2. 2. 一、 平滑图像/模糊
  3. 3. 二、腐蚀和膨胀
  4. 4. 三、 形态变化
  5. 5. 四、 Hit-or-Miss 击中击不中
  6. 6. 五、 图像金字塔
    1. 6.1. 1. 图像金字塔和采样
    2. 6.2. 2. 图像金字塔的作用
  7. 7. 六、阈值操作
  8. 8. 七、 线性滤波器
  9. 9. 八、设置边框
  10. 10. 九、 霍夫变换
    1. 10.1. 1.Hough Line变换 找直线
    2. 10.2. 2.Hough Circle变换 找圆(圆心和半径)
  11. 11. 十、重映射(Remapping)
  12. 12. 十一、仿射变换(Affine Transformations)
  13. 13. 十二、直方图
    1. 13.1. 1.计算直方图
    2. 13.2. 2.直方图均衡化
    3. 13.3. 3.直方图比较
    4. 13.4. 4.反向投影
  14. 14. 十三、 模板匹配
  15. 15. 十四、轮廓查找
  16. 16. 十五、凸包
  17. 17. 十六、 多边形拟合
  18. 18. 十七、空间矩,中心矩,归一化中心矩,Hu矩
  19. 19. 十八、判断点在多边形内部还是外部
  20. 20. 使用形态学操作来提取水平和垂直线,加水印的方法
© 绿小蕤
访问量:45277次| 访客数:38778人次
版权属于绿小蕤
本喵出生 2589 天 19 小时 42 分
  • 所有文章
  • 友链
  • 学习履历

tag:

  • Advanced Technology
  • C++
  • cmake
  • Linux
  • 硬件
  • opencv
  • 区块链
  • 深度学习
  • python
  • 机器学习
  • Hexo
  • Git
  • 纪念第一篇文章
  • 计算机网络
  • tensorflow
  • 编译
  • 配置
  • 数据结构
  • caffe
  • cs144
  • cs231n
  • ubuntu
  • hexo
  • 计算机网络、密码学
  • 操作系统
  • 算法
  • 软件
  • 云

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

  • vim使用说明

    2019-10-07

    #Linux

  • 区块链

    2019-01-15

    #区块链

  • 密码学

    2019-01-15

    #计算机网络、密码学

  • caffe(九)——配置文件

    2019-01-10

    #caffe

  • caffe(八)——layer

    2019-01-10

    #caffe

  • caffe(七)——blob

    2019-01-10

    #caffe

  • TCP/IP HTTP Soket

    2019-01-08

    #计算机网络

  • 网页生成

    2019-01-07

    #计算机网络

  • yilia主题的相册搭建

    2019-01-07

    #hexo

  • 算法(二)——递归、迭代、回溯

    2019-01-06

    #算法

  • 算法(一)——时间复杂度

    2019-01-06

  • caffe(六)——可视化网络工具Netscope

    2019-01-04

    #caffe

  • caffe(五)——windows下输出log日志和画出accuracy和loss曲线

    2019-01-03

    #caffe

  • caffe(四)——finetune

    2019-01-03

    #caffe

  • caffe(三)——模型和数据集

    2019-01-02

    #caffe

  • 图神经网络

    2019-01-02

    #Advanced Technology#深度学习

  • caffe(二)——训练和测试MNIST

    2018-12-27

    #caffe

  • caffe(一)——windows下环境配置

    2018-12-27

    #caffe

  • Christmas Gift——pygame、pyinstaller

    2018-12-25

  • 机器学习(五)——KNN

    2018-12-25

    #机器学习

  • 机器学习(四)——XGBoost

    2018-12-25

    #机器学习

  • 机器学习(三)——PCA

    2018-12-24

    #机器学习

  • 机器学习(二)——贝叶斯算法

    2018-12-24

    #机器学习

  • 机器学习(一)——决策树、随机森林

    2018-12-24

    #机器学习

  • 编译和链接(四)——重定义

    2018-12-19

    #编译

  • 编译和链接(三)——头文件与库

    2018-12-19

    #编译

  • 编译和链接(二)——静态链接和动态链接

    2018-12-19

    #编译

  • 编译和链接(一)——预处理、编译、链接

    2018-12-19

    #编译

  • Linux(六)——进程调度

    2018-12-17

    #Linux

  • Debug、Release版本下 多线程问题

    2018-11-28

  • Dlib中imglab生成失败的解决方法

    2018-11-19

  • C++学习:多线程

    2018-11-08

    #C++

  • cs144:1-1

    2018-10-29

    #计算机网络#cs144

  • [置顶]目录检索

    2018-10-25

  • [置顶]分享

    2018-10-25

  • win10+VS2013+Dlib 安装配置

    2018-10-22

    #配置

  • C++学习:强制类型转换

    2018-10-21

    #C++

  • C++学习:const、static、extern

    2018-10-20

    #C++

  • C++学习:指针和引用

    2018-10-20

    #C++

  • C++学习:内存管理

    2018-10-19

    #C++

  • C++学习:C和C++的I/O库区别

    2018-10-19

    #C++

  • C++学习:内存对齐

    2018-10-19

    #C++

  • C++学习:类

    2018-10-19

    #C++

  • C++学习:标准库和标准模板库

    2018-10-19

    #C++

  • 操作系统启动过程

    2018-10-18

    #操作系统

  • 处理器

    2018-10-18

    #硬件

  • 远程登陆

    2018-10-17

  • 文本文件和二进制文件

    2018-09-20

  • CUDA和OpenCL

    2018-09-17

    #硬件

  • 2018-09-15

  • Linux(五)—— .o、.a、.so

    2018-09-13

    #Linux

  • CMake(三)—— Linux下使用CMake

    2018-09-13

    #cmake#Linux

  • ubuntu(三)—— opencv、cheese安装

    2018-09-13

    #Linux#ubuntu

  • ubuntu(二)—— sublime的python环境搭建

    2018-09-13

    #Linux#ubuntu

  • ubuntu(一)—— VM虚拟机上安装ubuntu

    2018-09-13

    #Linux#ubuntu

  • Linux(四)—— 文件

    2018-09-10

    #Linux

  • CMake(二)—— Windows下使用CMake

    2018-09-10

    #cmake

  • CMake(一)—— make和cmake

    2018-09-10

    #cmake

  • Linux(三)—— 环境变量

    2018-09-09

    #Linux

  • Linux(二)—— 系统目录结构

    2018-09-09

    #Linux

  • Linux(一)—— 为什么要用Linux做开发

    2018-09-09

    #Linux

  • DLL的创建与使用

    2018-09-04

  • 剑指offer(一)

    2018-08-22

    #C++

  • 编译器、编辑器、IDE

    2018-08-22

    #软件

  • VS+opencv的配置

    2018-08-19

    #编译#配置

  • opencv(六)——图像坐标系和宽高

    2018-08-15

    #opencv

  • opencv(五)——图像读取

    2018-08-15

    #opencv

  • opencv(四)——AdaBoost

    2018-08-14

    #opencv

  • opencv(三)——绘图

    2018-08-14

    #opencv

  • opencv(二)——imgproc

    2018-08-14

    #opencv

  • opencv(一)——HighGUI

    2018-08-14

    #opencv

  • cs231n笔记(十一)——生成式对抗网络

    2018-08-14

    #深度学习#cs231n

  • cs231n笔记(十)——反卷积与特征可视化

    2018-08-14

    #深度学习#cs231n

  • cs231n笔记(九)——分类、检测、分割、跟踪

    2018-08-13

    #深度学习#cs231n

  • 嵌入式与各种板子

    2018-08-05

    #硬件

  • Tensorboard 总结

    2018-08-05

    #python#tensorflow

  • TensorFlow 总结

    2018-08-05

    #python#tensorflow

  • cs231n笔记(八)——CNN经典网络

    2018-08-05

    #深度学习#cs231n

  • cs231n笔记(七)——深度学习框架

    2018-08-03

    #深度学习#cs231n

  • cs231n笔记(六)——循环神经网络

    2018-08-02

    #深度学习#cs231n

  • TensorFlow(四)——RNN实现MNIST的分类

    2018-08-02

    #python#tensorflow

  • NLP——word2vec

    2018-08-01

    #深度学习

  • TensorFlow(三)——两层CNN神经网络实现MNIST的分类

    2018-07-31

    #python#tensorflow

  • Ipython 与 Jupyter Notebook

    2018-07-29

    #python

  • TensorFlow(二)——单层神经网络实现MNIST的分类

    2018-07-26

    #python#tensorflow

  • TensorFlow(一)——两层神经网络预测线性回归

    2018-07-26

    #python#tensorflow

  • cs231n笔记(二)——最优化

    2018-07-26

    #深度学习#cs231n

  • 进程和线程

    2018-07-26

    #硬件

  • cs231n笔记(五)——卷积神经网络

    2018-07-25

    #深度学习#cs231n

  • cs231n笔记(四)——神经网络

    2018-07-18

    #深度学习#cs231n

  • cs231n笔记(三)——分段式反向传播求梯度

    2018-07-16

    #深度学习#cs231n

  • cs231n笔记(一)——线性回归、逻辑回归、多分类

    2018-07-15

    #深度学习#cs231n

  • 2018-07-15

  • 程序是怎样跑起来的

    2018-07-14

    #硬件

  • 解决pip安装慢的问题

    2018-06-28

    #python

  • Deep-Learning-吴恩达-作业(七)

    2018-06-28

    #深度学习#python

  • Deep Learning 吴恩达 课程笔记大纲

    2018-06-27

    #深度学习

  • Deep-Learning-吴恩达-作业(六)

    2018-06-25

    #深度学习#python

  • Deep-Learning-吴恩达-作业(五)

    2018-06-25

    #深度学习#python

  • Deep-Learning-吴恩达-作业——关于plot_decision_boundary()函数的理解

    2018-06-25

    #python#机器学习

  • Deep-Learning-吴恩达-作业(四)

    2018-06-24

    #深度学习#python

  • 深度学习和强化学习

    2018-06-21

    #机器学习

  • Deep-Learning-吴恩达-作业(三)

    2018-06-20

    #深度学习#python

  • Deep Learning 吴恩达 作业(二)

    2018-06-20

    #深度学习#python

  • Deep Learning 吴恩达 作业(一)

    2018-06-15

    #深度学习#python

  • anaconda,conda,pip的关系

    2018-06-13

    #python

  • 正则表达式

    2018-06-11

  • 机器学习算法回顾目录

    2018-06-05

    #机器学习

  • Cygwin 安装

    2018-06-01

    #Linux

  • Git 学习

    2018-06-01

    #Git

  • CryptoKitties

    2018-05-28

    #区块链

  • 2050大会——关于图像处理的收获

    2018-05-28

    #Advanced Technology

  • 虚拟机和云(特别简陋的认识)

    2018-05-18

    #云

  • 啥叫运营商

    2018-05-18

  • XML、YAML、JSON

    2018-05-14

    #数据结构

  • 傅里叶变换和图像处理

    2018-05-14

    #opencv

  • 机器学习算法大总结

    2018-05-11

    #机器学习

  • python入门编程

    2018-05-09

    #python

  • CommandLineParse类

    2018-05-08

    #opencv

  • argc和argv

    2018-05-08

    #C++

  • Hexo主题的优化

    2018-05-08

    #Hexo

  • ImageWatch

    2018-05-07

    #opencv

  • 天池比赛入门

    2018-05-07

    #机器学习

  • 编译器和解释器

    2018-05-04

    #编译

  • GitHub+Hexo 搭建自己的博客

    2018-05-04

    #Hexo

  • Hello GitHub

    2018-05-03

    #Hexo#纪念第一篇文章

  • 师兄的Blog
JZY

研究生:东南大学电子学院
本科:南京理工大学电光学院