python下openCV学习笔记(二)图像灰度转化,模糊化,边缘检测,膨胀与腐蚀

python下openCV学习笔记(二)图像灰度转化,模糊化,边缘检测,膨胀与腐蚀


一、图像的灰度化

很多时候我们在进行图像处理的时候,需要使用灰度图像,为什么使用灰度图像?从目前已知的知识来看,灰度图像相较于彩色图像处理起来更快,灰度化之后矩阵维数下降,运算速度大幅度提高,并且梯度信息仍然保留。但是若使用关于颜色的算法就当然的不能对 图像进行灰度化

import cv2

img = cv2.imread("img/bingbing_is_mine.jpg")

imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)  #对图像进行灰度化,两个参数,第一个指图像数据,
												#第二个参数指灰度

cv2.imshow("imgGray",imgGray)
cv2.waitKey(0)
cv2.destroyAllWindows()

冰冰原来图片
冰冰灰度图片

使用cvtColor()方法对图像进行颜色空间转换(HSV,HSI等颜色空间转换),也可以向灰度转换。在openCV中,使用BGR来指代RGB颜色,所以COLOR_BGR2GRAY表示转换为灰度(RGB to Gray?)


二、图像的模糊化

import cv2


img = cv2.imread("img/bingbing_is_mine.jpg")

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

imgBlur = cv2.GaussianBlur(imgGray,(7,7),0)  #使用高斯滤波对图像进行模糊化处理

cv2.imshow("imgBefore",imgGray)
cv2.imshow("imgAfter",imgBlur)
cv2.waitKey(0)
cv2.destroyAllWindows()

使用GaussianBlur()方法对图像进行平滑(模糊)处理,上面代码展示是对灰度图像的模糊化处理。
什么是高斯滤波?形象点说就是用一个模板(高斯核)对图像从左到右,从上到下遍历过去。类似于CNN神经网络。
常用的参数是 cv2.GaussianBlur(src, (blur1, blur2), 0):
第一个参数指的是原图像,
第二个参数高斯核大小,一般是奇数,其中越大则模糊程度越大,(1,1)则表示不处理,两个数可以不同。
第三个参数指的是标准差,一般取0。

在这里插入图片描述
在这里插入图片描述


三、图像的边缘检测

import cv2

img = cv2.imread("img/bingbing_is_mine.jpg")

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

imgBlur = cv2.GaussianBlur(imgGray,(5,5),0)

imgCanny1 = cv2.Canny(imgBlur,100,150)   #边缘检测代码
imgCanny2 = cv2.Canny(imgBlur,50,100)

cv2.imshow("imgBefore",imgCanny1)  
cv2.imshow("imgAfter",imgCanny2)
cv2.waitKey(0)
cv2.destroyAllWindows()

使用Canny()函数对图像进行边缘检测。在使用高斯滤波去除图像噪点消除影响后,可以对图像进行边缘检测。常用参数cv2.Canny(src, thresh1, thresh2) :
第一个参数:src表示输入的图片,
第二个参数:thresh1表示最小阈值,
第三个参数:thresh2表示最大阈值,双阈值用于删选边缘信息。
下图是不同阈值之间的比较,可以看出在最大阈值和最小阈值都偏小的情况下,我们可以看出右边的冰冰比左边的冰冰拥有更多的轮廓信息,但也容易存在非边缘点的信息。
在这里插入图片描述

四、图像的膨胀与腐蚀

import cv2
import  numpy as np

img = cv2.imread("img/bingbing_is_mine.jpg")
kernel = np.ones((5,5),np.uint8)

imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
imgBlur = cv2.GaussianBlur(imgGray,(5,5),0)
imgCanny = cv2.Canny(imgBlur,50,100)

imgDialation = cv2.dilate(imgCanny,kernel,iterations=1)  #膨胀
imgEroded = cv2.erode(imgDialation,kernel,iterations=1)  #腐蚀

cv2.imshow("imgBefore",imgCanny)
cv2.imshow("imgAfter1",imgDialation)
cv2.imshow("imgAfter2",imgEroded)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.dilate()与cv2.erode()分别是图像的膨胀与腐蚀,这里一般有三个参数:
第一个参数是原图像,第二个参数是核的大小,第三个参数是迭代次数。
这里我仅运行过一次代码并未深入学习。

下图中第一张图为边缘检测图,第二张图为膨胀图像,第三章为膨胀图像的腐蚀图像。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值