python视觉识别_python+opencv实现机器视觉基础技术(边缘提取,图像滤波,边缘检测算子,投影,车牌字符分割)...

本文介绍了使用Python和OpenCV进行机器视觉的基础技术,包括图像处理中的边缘提取、图像滤波、边缘检测算子和车牌字符分割。通过Python代码示例展示了如何进行阈值分割、反色、Canny边缘检测、均值滤波、中值滤波、高斯滤波以及高斯边缘检测。此外,还讨论了边缘检测算子,如Roberts Cross、Prewitt和Sobel算子,以及投影技术在图像分析中的应用。
摘要由CSDN通过智能技术生成

??机器视觉是人工智能正在快速发展的一个分支。简单说来,机器视觉就是用机器代替人眼来做测量和判断。它是一项综合技术,包括图像处理、机械工程技术、控制、电光源照明、光学成像、传感器、模拟与数字视频技术、计算机软硬件技术(图像增强和分析算法、图像卡、 I/O卡等)。

??下面介绍一些机器视觉的基础方法,用到的技术是python+opencv。python是一种很方便的高级编程语言,代码量少,而OpenCV是一个基于BSD许可发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

一:边缘提取

??在机器视觉中,一个非常基础的操作就是图像处理,而在图像处理中有一个十分重要的知识就是边缘提取。边缘提取,指数字图像处理中,对于图片轮廓的一个处理。对于边界处,灰度值变化比较剧烈的地方,就定义为边缘。也就是拐点,拐点是指函数发生凹凸性变化的点。和高数的导数有联系,将某个指定的物体的边缘进行提取出来。而用python+opencv可以很方便地进行边缘提取操作。

??步骤如下:

1.对图像进行阈值分割并反色

??首先需要新建一个python文件,导入cv2的库(OpenCV2的python库),并显示一张图片,代码为:

import cv2

# 读取本相对路径下的initial.bmp文件

image = cv2.imread ("initial.bmp")

# 将image对应图像在图像窗口显示出来

cv2.imshow(‘initial‘,image)

# waitKey使窗口保持静态直到用户按下一个键

cv2.waitKey(0)

20200329194416160714.jpg

??对图像进行阈值分割,阈值设定为80,得到二值化灰度图,代码为:

# 对图像进行阈值分割,阈值设定为80,得到二值化灰度图

ret,image1 = cv2.threshold(image,80,255,cv2.THRESH_BINARY)

cv2.imshow(‘grayscale‘,image1)

20200329194416575726.png

??将图像进行反色,代码如下:

image2 = image1.copy()# 复制图片

for i in range(0,image1.shape[0]):#image.shape表示图像的尺寸和通道信息(高,宽,通道)

for j in range(0,image1.shape[1]):

image2[i,j]= 255 - image1[i,j]

cv2.imshow(‘colorReverse‘,image2)

20200329194416660682.png

2.边缘提取

??下面就是边缘提取了,用findContours差影法或者Canny方法检测边缘,用原图像减去腐蚀后的收缩图像,提取边缘。代码如下:

# 边缘提取

img = cv2.cvtColor(image2,cv2.COLOR_BGR2GRAY)

canny_img_one = cv2.Canny(img,300,150)

canny_img_two = canny_img_one.copy()# 复制图片

for i in range(0,canny_img_one.shape[0]):#image.shape表示图像的尺寸和通道信息(高,宽,通道)

for j in range(0,canny_img_one.shape[1]):

canny_img_two[i,j]= 255 - canny_img_one[i,j]

cv2.imshow(‘edge‘,canny_img_two)

??最终我们就可以得到一个边缘提取后的图形,如下:

20200329194416721225.png

二:图像滤波

??图像滤波,即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作,其处理效果的好坏将直接影响到后续图像处理和分析的有效性和可靠性。

??噪声就是由于成像系统、传输介质和记录设备等的不完善,数字图像在其形成、传输记录过程中或者在图像处理的某些环节当输入的像对象并不如预想时受到的污染。

??而图像滤波有很多种滤波方式,本次实验采用的滤波方式是均值滤波,中值滤波和高斯滤波,以及高斯边缘检测。

??均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。

??中值滤波是基于排序统计理论的一种能有效抑制噪声的非线性信号处理技术,中值滤波的基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,

1. 主要工作: 基于MATLAB图像处理的中值滤波、均值滤波以及高斯滤波实现与对比: a) 中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值. b) 均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。 c) 高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。 2. 代码功能: 实现中值滤波、均值滤波以及高斯滤波,并对图像进行输出 3. 结果分析 a) 图像经过中值滤波后,高斯噪声没有被完全去除,椒盐噪声几乎被完全去除效果较好。经过均值滤波后不管是高斯噪声还是椒盐噪声大部分都没有被去除,只是稍微模糊化。经过高斯滤波后,高斯噪声和椒盐噪声几乎被很大程度的模糊化,原图好像被加上了一层蒙版。 【注】若添加图片分辨率过高会发出警报,如果可以正常输出则可以忽视。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值