• Image Processing (imgproc module)

    In this section you will learn about the image processing (manipulation) functions inside OpenCV.

边缘检测

  • Canny Edge Detector

    Compatibility: > OpenCV 2.0

    Author: Ana Huamán

    Where we learn a sophisticated alternative to detect edges.

理论

Canny Edge detector,也叫optimal detector,是由John F. Canny于1986年开发的。这种算法旨在满足下面三个标尺:

  • Low error rate: Meaning a good detection of only existent edges.
  • 低错误率:仅仅在边缘检测出轮廓
  • Good localization: The distance between edge pixels detected and real edge pixels have to be minimized.
  • 精准定位:检测出的边缘尽可能的与实际边缘重合
  • Minimal response: Only one detector response per edge.
  • 最小回应:一个边缘只产生一个检测结果

步骤

过滤噪声:参见平滑处理

发现图像梯度大的部分:参见梯度;额外的,真正的梯度应有方向,这里是计算了方向的。

截取非最大部分:保存轮廓线边缘

Hysteresis(迟滞):对于高于阈值上线的部分视为边界,低于阈值下线的被忽视,处于两个阈值之间的,且于高于阈值上线部分相连的,也被视为边界。

执行过程:

Create some needed variables 声明所需变量

Loads the source image 装载图片

Create a matrix of the same type and size of src (to be dst) 为输出图像开辟空间

Convert the image to grayscale (using the function cv::cvtColor  灰度转换

Create a window to display the results 创建显示窗口

Create a Trackbar for the user to enter the lower threshold for our Canny detector 创建Trackbar对象,输入阈值下线

Let's check the CannyThreshold function, step by step Canny算法实现

We fill a dst image with zeros (meaning the image is completely black) 初始化输出图像矩阵

Finally, we will use the function cv::Mat::copyTo to map only the areas of the image that are identified as edges 将处理结果拷贝到输出图像中

We display our result:显示结果

Hough变换

  • Hough Line Transform

    Compatibility: > OpenCV 2.0

    Author: Ana Huamán

    Where we learn how to detect lines

  • Hough Circle Transform

    Compatibility: > OpenCV 2.0

    Author: Ana Huamán

    Where we learn how to detect circles

这个我并不懂啊,据说是有很好的 检测直线、圆的能力,但又被说性能不行。

重映射

  • Remapping

    Compatibility: > OpenCV 2.0

    Author: Ana Huamán

    Where we learn how to manipulate pixels locations

这节提出的理论:

假如有一个图像表达式:h(x,y),表示在一定区间内,给定一个坐标(x,y),则对应于该坐标的图像的值为h(x,y),这是原图像在坐标上的映射。

现在把他重映射了,即有一个映射函数f,输入参数为原图像中的某点,能得到对应输出图像中的另外一点。

g(x,y)=f(h(x,y))
d

源码中的map_x map_y构成f(),即dst(x,y) = src(map_x(x,y),map_y(x,y)),然后通过remap函数实现重映射。

补充:我觉得吧,这里看似多此一举的绘制map_x、map_y,实际上是一种高效开发的必然。这样可以让操作和功能分离,保证了功能的自由拓展能力,而避免了重复的对操作(remap)过程的调试开发。

仿射变换

  • Affine Transformations

    Compatibility: > OpenCV 2.0

    Author: Ana Huamán

    Where we learn how to rotate, translate and scale our images

理论请自行查看,这是一种相对于重映射更为固定化的过程,因此具有更具描述性的操作。

本节提出两种变换手段:

cv::warpAffine  cv::getRotationMatrix2D

像素均衡、直方图均衡化 Histogram Equalization

  • Histogram Equalization

    Compatibility: > OpenCV 2.0

    Author: Ana Huamán

    Where we learn how to improve the contrast in our images


理论:像素直方图是一个分布不太均匀的东西,这让我们感觉图像不够饱满。现在强行把他们之间的距离拉大,比如原先只有深红、猩红、血红这样色差不大的一些颜色,现在为了增加表现力,我把他们改为红黑、亮红、浅红这样差别比较大的颜色。

背景投影

  • Back Projection

    Compatibility: > OpenCV 2.0

    Author: Ana Huamán

    Where we learn how to use histograms to find similar objects in images

。。。貌似能抓住图像中的鲜艳部分,有挖出背景的功能。各位大神原谅我这弱鳥,实在是啃不动这些图形图像专业的东西。我尽量把更多直接明了的部分放进来,有需要用到这些功能的可以方便检索。

模式匹配(模板搜索)

  • Template Matching

    Compatibility: > OpenCV 2.0

    Author: Ana Huamán

    Where we learn how to match templates in an image

功能:找到src中与目标最为匹配的区域

这里提出了六种匹配方式:

  1. method=CV_TM_SQDIFF

    R(x,y)=∑x′,y′(T(x′,y′)−I(x+x′,y+y′))2
  2. method=CV_TM_SQDIFF_NORMED

    R(x,y)=∑x′,y′(T(x′,y′)−I(x+x′,y+y′))2∑x′,y′T(x′,y′)2⋅∑x′,y′I(x+x′,y+y′)2‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾√
  3. method=CV_TM_CCORR

    R(x,y)=∑x′,y′(T(x′,y′)⋅I(x+x′,y+y′))
  4. method=CV_TM_CCORR_NORMED

    R(x,y)=∑x′,y′(T(x′,y′)⋅I(x+x′,y+y′))∑x′,y′T(x′,y′)2⋅∑x′,y′I(x+x′,y+y′)2‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾√
  5. method=CV_TM_CCOEFF

    R(x,y)=∑x′,y′(T′(x′,y′)⋅I′(x+x′,y+y′))

    where

    T′(x′,y′)=T(x′,y′)−1/(w⋅h)⋅∑x″,y″T(x″,y″)I′(x+x′,y+y′)=I(x+x′,y+y′)−1/(w⋅h)⋅∑x″,y″I(x+x″,y+y″)
  6. method=CV_TM_CCOEFF_NORMED

    R(x,y)=∑x′,y′(T′(x′,y′)⋅I′(x+x′,y+y′))∑x′,y′T′(x′,y′)2⋅∑x′,y′I′(x+x′,y+y′)2‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾√

寻找轮廓

  • Finding contours in your image

    Compatibility: > OpenCV 2.0

    Author: Ana Huamán

    Where we learn how to find contours of objects in our image

  • Use the OpenCV function cv::findContours
  • Use the OpenCV function cv::drawContours

寻找和绘制轮廓

凸包

  • Convex Hull

    Compatibility: > OpenCV 2.0

    Author: Ana Huamán

    Where we learn how to get hull contours and draw them!

Original

创建边界区域、圆

  • Creating Bounding boxes and circles for contours

    Compatibility: > OpenCV 2.0

    Author: Ana Huamán

    Where we learn how to obtain bounding boxes and circles for our contours.

  • Creating Bounding rotated boxes and ellipses for contours

    Compatibility: > OpenCV 2.0

    Author: Ana Huamán

    Where we learn how to obtain rotated bounding boxes and ellipses for our contours.

关键看这里

  1. For every found contour we now apply approximation to polygons with accuracy +-3 and stating that the curve must me closed.

    After that we find a bounding rect for every polygon and save it to boundRect.

    At last we find a minimum enclosing circle for every polygon and save it to center and radius vectors.

    for( size_t i = 0; i < contours.size(); i++ )
    {
    approxPolyDP( Mat(contours[i]), contours_poly[i], 3, true );
    boundRect[ i] = boundingRect( Mat(contours_poly[i]) );
    minEnclosingCircle( contours_poly[i], center[i], radius[i] );
    }

    We found everything we need, all we have to do is to draw.

效果:

【opencv 官方教程】翻译3 图像处理 下相关推荐

  1. OpenCV官方教程中文版

    OpenCV官方教程中文版(For Python) OpenCV2-Python-Tutorials 段力辉 译 说明:搬运自linux公社pdf文件,粗略搬运,仅作个人笔记参考,有时间再美化 部分文 ...

  2. Unity3D Shader官方教程翻译(三)

    Unity3D Shader官方教程翻译(三) 1.Shader语法:Pass 1个Pass块可以使一个几何物体被一次渲染. Pass { [Name and Tags] [RenderSetup] ...

  3. Dapper官方教程翻译8:Dapper方法之QueryMultiple(转)

    Dapper官方教程翻译8:Dapper方法之QueryMultiple 2019年02月28日 10:42:22 Day_and_Night_2017 阅读数:120 QueryMultiple方法 ...

  4. Caffe官方教程翻译(9):Multilabel Classification with Python Data Layer

    前言 最近打算重新跟着官方教程学习一下caffe,顺便也自己翻译了一下官方的文档.自己也做了一些标注,都用斜体标记出来了.中间可能额外还加了自己遇到的问题或是运行结果之类的.欢迎交流指正,拒绝喷子! ...

  5. Caffe官方教程翻译(8):Brewing Logistic Regression then Going Deeper

    前言 最近打算重新跟着官方教程学习一下caffe,顺便也自己翻译了一下官方的文档.自己也做了一些标注,都用斜体标记出来了.中间可能额外还加了自己遇到的问题或是运行结果之类的.欢迎交流指正,拒绝喷子! ...

  6. Caffe官方教程翻译(7):Fine-tuning for Style Recognition

    前言 最近打算重新跟着官方教程学习一下caffe,顺便也自己翻译了一下官方的文档.自己也做了一些标注,都用斜体标记出来了.中间可能额外还加了自己遇到的问题或是运行结果之类的.欢迎交流指正,拒绝喷子! ...

  7. Caffe官方教程翻译(6):Learning LeNet

    前言 最近打算重新跟着官方教程学习一下caffe,顺便也自己翻译了一下官方的文档.自己也做了一些标注,都用斜体标记出来了.中间可能额外还加了自己遇到的问题或是运行结果之类的.欢迎交流指正,拒绝喷子! ...

  8. Caffe官方教程翻译(5):Classification: Instant Recognition with Caffe

    前言 最近打算重新跟着官方教程学习一下caffe,顺便也自己翻译了一下官方的文档.自己也做了一些标注,都用斜体标记出来了.中间可能额外还加了自己遇到的问题或是运行结果之类的.欢迎交流指正,拒绝喷子! ...

  9. Caffe官方教程翻译(4):CIFAR-10 turorial

    前言 最近打算重新跟着官方教程学习一下caffe,顺便也自己翻译了一下官方的文档.自己也做了一些标注,都用斜体标记出来了.中间可能额外还加了自己遇到的问题或是运行结果之类的.欢迎交流指正,拒绝喷子! ...

  10. Caffe官方教程翻译(3):Siamese Network Training with Caffe

    前言 最近打算重新跟着官方教程学习一下caffe,顺便也自己翻译了一下官方的文档.自己也做了一些标注,都用斜体标记出来了.中间可能额外还加了自己遇到的问题或是运行结果之类的.欢迎交流指正,拒绝喷子! ...

最新文章

  1. 想成为BAT中的一员,你总要去学点什么(一)
  2. 快手抢占“短视频第一股”,宿华都有哪些底牌?
  3. 语音媒体和信令的测试软件,IP多媒体子系统信令分析工具的设计与实现
  4. 使用Logisim软件实现一位全加器,四位串行加法器,四位并行加法器。
  5. 旧手机上的微信数据丢失怎么才能恢复回来
  6. “燕云十六将”之三弟王静
  7. 秦始皇寻找长生药的始末
  8. do.....while(0)让你虎躯一震的用法
  9. mysql修改游戏元宝_页游源码【武斗乾坤】自带安装启动教程+元宝游戏数据修改教程+自由一键游戏启动服务端...
  10. Linux 网卡流量工具详细介绍【转】
  11. 微信小程序(7)说说微信小程序的发布流程?
  12. 软件测试面试题:你的测试职业发展是什么?
  13. 小米注册极石汽车商标,是否为小米汽车的最终名称?
  14. python怎么查看安装了哪些库
  15. 有一个分数序列:2/1, 3/2, 5/3, 8/5, 13/8, …编写程序求出这个序列的前n项之和。
  16. SAP FI 系列 (034) - 应收票据冲销
  17. Map根据Key值进行排序(升序加降序)
  18. Android WebView控件
  19. 求与下面谓词公式等值的前束范式_求下列公式的前束范式
  20. 临床路径在中国的实施现状及路径产品发展前景

热门文章

  1. 前端框架 Electron 使用总结
  2. 【ReLU】Rectified Linear Units, 线性修正单元激活函数
  3. 【FRDM-KW41Z学习笔记】运行蓝牙低功耗无线UART应用
  4. adb广告拦截 android,Android PKMS拦截adb安装应用
  5. 1.1.9 如何从正文开始设置页眉页脚
  6. 作为PM,PMP证书重要吗?
  7. 【课设分享】基于树莓派的视频采集系统
  8. 关于前面内容的查疑补漏
  9. “动态规划算法”那些事儿
  10. Python-opencv进行图片切割与保存