前情提要:作为刚入门机器视觉的小伙伴,第一节课学到机器视觉语法时觉得很难理解,

很多人家的经验,我发现都千篇一律,功能函数没解析,参数不讲解,就一个代码,所以在此将搜集的解析和案例拿出来汇总!!!

一、opencv+python环境搭建

  其实能写python的就能写opencv,但是工具很总要,代码提示也很重要,你可能会用submit     vs等工具,submit编码个人觉得不够智能,vs的话过完年我学的方向不一致,所以没用

  推荐pycharm ,在项目setting中的项目解释器中安装opencv-python即可进行编码。python环境搭建也灰常方便。

二、边缘提取案例

  

import cv2
def edge_demo(image):
#GaussianBlur图像高斯平滑处理
blurred = cv2.GaussianBlur(image, (3, 3), 0)
  #(3, 3)表示高斯矩阵的长与宽都是3,意思就是每个像素点按3*3的矩阵在周围取样求平均值,,标准差取0
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  #颜色模式转换成cv2.COLOR_BGR2GRAY模式下的灰度图像 edge_output = cv2.Canny(gray, 50, 150)
  #提取上一步中处理好的图像边缘,50和150分别代表低阈值和高阈值,高阈值用来将物体与背景区分开来,低的用于平滑连接高阈值产生的片段,使图像成一个整体
cv2.imshow("canny edge", edge_output)#输出灰度图像
  #原图与灰度图像与运算,按照灰度图剪切加和的原图
dst = cv2.bitwise_and(image, image, mask=edge_output) cv2.imshow("color edge", dst)#输出带颜色边缘图像 if __name__ == '__main__':
img = cv2.imread("cat.jpg")
# cv2.namedWindow("input image", cv2.WINDOW_AUTOSIZE)
cv2.imshow("input image", img)
edge_demo(img) cv2.waitKey(0)#等待键盘输入,不输入 则无限等待
cv2.destroyAllWindows()#清除所以窗口

三、解释功能函数

  其实上面的代码也是用的别人的,但绝大多数都没有解释,对于像我这种新手不是很友好

  •   高斯处理

    图像处理中,常用的滤波算法有均值滤波、中值滤波以及高斯滤波等。

  三种滤波器的对比:

  滤波器种类 基本原理 特点
  均值滤波 使用模板内所有像素的平均值代替模板中心像素灰度值 易收到噪声的干扰,不能完全消除噪声,只能相对减弱噪声
  中值滤波 计算模板内所有像素中的中值,并用所计算出来的中值体改模板中心像素的灰度值 对噪声不是那么敏感,能够较好的消除椒盐噪声,但是容易导致图像的不连续性
  高斯滤波 对图像邻域内像素进行平滑时,邻域内不同位置的像素被赋予不同的权值 对图像进行平滑的同时,同时能够更多的保留图像的总体灰度分布特征
  意思就是使你的图像灰度分布更均匀,每个点的像素均为周围按3*3的矩阵在周围取样求平均值,,标准差取0来处理
     blurred = cv2.GaussianBlur(image, (3, 3), 0)
#GaussianBlur图像高斯平滑处理
#(3, 3)表示高斯矩阵的长与宽都是3,意思就是每个像素点按3*3的矩阵在周围取样求平均值,,标准差取0
  • 灰度转换----》也叫做二值化处理

  故名思意就是转换成黑白图像,后面的参数中    cv2.COLOR_BGR2GRAY  其实就是色彩模式,所以函数名为 cvtColor(色彩模式转换)

  cvtColor()用于将图像从一个颜色空间转换到另一个颜色空间的转换(目前常见的颜色空间均支持),并且在转换的过程中能够保证数据的类型不变,即转换后的图像的数据类型和位深与源图像一致。

 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  #颜色模式转换成cv2.COLOR_BGR2GRAY模式下的灰度图像
  • 边缘识别提取

  这一步是将二值化后的图像提取边缘,50和150分别代表低阈值和高阈值,高阈值用来将物体与背景区分开来,低的用于平滑连接高阈值产生的片段,使图像成一个整体

  简明而言就是,小的用于细小的地方处理,大的宏观处理----》大阈值用于分离背景与轮廓,晓得用于拼接细小的轮廓,即可形成一个整体

edge_output = cv2.Canny(gray, 50, 150)
  #提取上一步中处理好的图像边缘,50和150分别代表低阈值和高阈值,高阈值用来将物体与背景区分开来,低的用于平滑连接高阈值产生的片段,使图像成一个整体
  • 输出即可,小面的函数只是对比学习而已,可以不用

(对于dst = cv2.bitwise_and(image, image, mask=edge_output) cv2.imshow("color edge", dst)#输出带颜色边缘图像
)  

python+opencv->边缘提取与各函数参数解析的更多相关文章

  1. Python中sort和sorted函数代码解析

    Python中sort和sorted函数代码解析 本文研究的主要是Python中sort和sorted函数的相关内容,具体如下. 一.sort函数 sort函数是序列的内部函数 函数原型: L.sor ...

  2. python通过装饰器检查函数参数的数据类型的代码

    把内容过程中比较常用的一些内容记录起来,下面内容段是关于python通过装饰器检查函数参数的数据类型的内容. def check_accepts(f): assert len(types) == f. ...

  3. python 装饰器修改调整函数参数

    简单记录一下利用python装饰器来调整函数的方法.现在有个需求:参数line范围为1-16,要求把9-16的范围转化为1-8,即9对应1,10对应2,...,16对应8. 下面是例子: def fo ...

  4. Python学习总结18:函数 参数篇

    1. 判断函数是否可调用 >>> import math >>> x = 1 >>> y = math.sqrt >>> cal ...

  5. Python学习札记(十三) Function3 函数参数二

    参考:函数参数 Note A.关键字参数: 1.关键字参数:**kw 可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple.而关键字参数允许你传入0个或任意个含参数名的 ...

  6. main函数参数解析

    int argc,char *argv agrc表示参数的个数 argv储存参数 这个函数的意思是逐一输出参数 实际上,main函数也可以带参数.带参数main函数的定义格式如下:void main( ...

  7. Matlab中plot函数参数解析

    功能 二维曲线绘图 语法 plot(Y) plot(X1,Y1,...) plot(X1,Y1,LineSpec,...) plot(...,'PropertyName',PropertyValue, ...

  8. Linux C编程--main函数参数解析

    我们经常用的main函数都是不带参数的.因此main 后的括号都是空括号.实际上,main函数可以带参数,这个参数可以认为是 main函数的形式参数.C语言规定main函数的参数只能有两个, 习惯上这 ...

  9. python 零散记录(六) callable 函数参数 作用域 递归

    callable()函数: 检查对象是否可调用,所谓可调用是指那些具有doc string的东西是可以调用的. 函数的参数变化,可变与不可变对象: 首先,数字 字符串 元组是不可变的,只能替换. 对以 ...

随机推荐

  1. yum pip

    方式1(yum安装):1.首先安装epel扩展源:[root@localhost ~]#  yum -y install epel-release如果没有安装epel扩展源而直接安装python-pi ...

  2. python-django框架-电商项目-用户模块开发_20191117

    实现注册的基本逻辑: 1,注册页面 注意:注册页面需要静态文件的支持,另外注册页面是基础基类的, 1,url,路由系统, 2,views,视图系统,还是使用类视图,里面有很多的函数, 2,views. ...

  3. 正则表达式sed学习(二)

    sedsed是一个流编辑器,非交互式的编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space)接着用 sed 命令处理缓冲区的内容,处理完成 ...

  4. Error、Bias、Variance及损失函数理解

    个人感觉理解误差.偏置.方差的一个好的解释,感谢分享:https://baijiahao.baidu.com/s?id=1601092478839269810&wfr=spider&f ...

  5. UML Learning

    在建筑业中,建模是一项经过检验并被广泛接受的工程技术,建立房屋和大厦的建筑模型,能帮助用户得到实际建筑物的印象.在软件建模中也具有同样的作用,建模提供了系统的蓝图. 建模是为了能够更好地理解正在开发的 ...

  6. 老版本loadrunner 打开侧边栏

  7. MongoDB的图形化连接工具MongoDB VUE

    MongoDB的图形化连接工具MongoDB VUE 类似mysql的navicat.

  8. 千亿VR市场 将被国内厂商玩坏多少?

    将被国内厂商玩坏多少?" title="千亿VR市场 将被国内厂商玩坏多少?"> 智能硬件行业在不断寻求新的突破口,当智能手机.平板.电视.家电等都司空见惯之后,能 ...

  9. 从未来看 C#

    前言 如今 C# 虽然发展到了 8.0 版本,引入了诸多的函数式特性,但其实在 C# 未来的规划当中,还有很多足以大规模影响现有 C# 代码结构和组成的特性,本文中将会对就重要的特性进行介绍,并用代码 ...

  10. C++中如何对单向链表操作

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...