码迷,mamicode.com
首页 > 编程语言 > 详细

opencv+python (2)

时间:2018-06-26 19:26:57      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:边界值   中心   默认   否则   开平   scale   参数   ima   size   

21、图像平滑,中值滤波

让临近的像素按照大小排列,取排列像素集中位于中间位置的值作为中值滤波后的像素值。

medianBlur函数

dst=cv2.medianBlur(src,ksize)   src,源文件   ,ksize,核大小,必须是比1大的奇数,如3,5,7等

r=cv2.medianBlur(o,3)

 

22、形态学变换,图像腐蚀

形态学转换主要针对的是二值图像,图像里只有0和1两个元素的值,0就是黑色的,1就是白色的。所谓的腐蚀,是针对它的前景色,即那些像素点的值为1的像素点,腐蚀的是白色。两个输入对象。对象1:二值原始图像。对象2:卷积核,关键的数组。  卷积核的中心点逐个像素扫描原始图像,被扫描到的原始图像中的像素点,只有当卷积核对应的元素值均为1时,其值才为1,否则值为0。

函数erode

dst=cv2.erode( src, kernel, iterations )  dst ,处理结果  src,源图像   kernel,卷积核    iterations,迭代次数,默认情况下,迭代次数是1,根据需要可以进行多次腐蚀操作

kernel=np.ones( (5,5), np.uint8 ) ones表示我们要生成一个里面都是1的5行5列的数组,np.uint8表示数据类型整型

import cv2

import numpy as np

o=cv2.imread("image\\erode.bmp",cv2.IMREAD_UNCHANGED)

kernel=np.ones((5,5),np.uint8)

erosion=cv2.erode(o,kernel,iterations=9)

cv2.imshow("original",o)

cv2.imshow("erosion",erosion)

 

23、形态学转换,图像膨胀

腐蚀操作的逆操作,图像被腐蚀后,去除了噪声,但是会压缩图像。对腐蚀过的图像,进行膨胀处理,可以去除噪声,并保持原有形状。卷积核的中心点逐个像素扫描原始图像,被扫描到的原始图像中的像素点,当卷积核对应的元素值只要有一个为1时,其值就为1,否则值为0。

函数dilate

dst = cv2.dilate( src, kernel, iterations )

kernel = np.ones((5,5),np.uint8)  np.uint8表示无符号的8位整数,最小值0,最大值是2的8次幂

dilation = cv2.dilate(o,kernel)

 

24、形态学转换,开运算

先腐蚀,再膨胀,是对原始图像的去掉噪声并保持原有图像不变。开运算( image )=膨胀(  腐蚀( image )  )

函数morphologyEx,形态学扩展函数,已经封装了不同运算,使用不同参数即可实现对应效果

opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)      opening,开运算结果    img,源图像    cv2.MORPH_OPEN,开运算     kernel卷积核(同前边的腐蚀膨胀卷积核)

k = np.ones((5,5),np.uint8)

r = cv2.morphologyEx(o,cv2.MORPH_OPEN,k)

 

25、形态学转换,图像闭运算

先膨胀,后腐蚀,它有助于关闭前景物体内部的小孔,或物体上的小黑点。闭运算( image )=腐蚀(  膨胀( image )  ),卷积核kernel数组越大,效果越明显。

函数morphologyEx

closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)  cv2.MORPH_CLOSE,闭运算

k = np.ones((5,5),np.uint8)

r = cv2.morphologyEx(o,cv2.MORPH_CLOSE,k)

 

26、形态学转换,图像梯度

原始图像,得到原始图像的膨胀图像和原始图像的腐蚀图像,用膨胀图像-腐蚀图像,得到轮廓图像 。 梯度( image )=膨胀( image )-腐蚀( image )

函数morphologyEx

result = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)  cv2.MORPH_GRADIENT, 梯度

k = np.ones((5,5),np.uint8)

r = cv2.morphologyEx(o,cv2.MORPH_CLOSE,k)

 

27、形态学转换,图像礼帽(顶帽tophat)

礼帽图像=原始图像-开运算图像,得到噪声图像。礼帽( image )= image - 开运算( image )

函数morphologyEx

result = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)     cv2.MORPH_TOPHAT, 礼帽

k = np.ones((5,5),np.uint8)

r = cv2.morphologyEx(o,cv2.MORPH_CLOSE,k)

 

28、形态学转换,图像黑帽

黑帽图像=闭运算图像-原始图像,得到图像内部的小孔,或前景色中的小黑点

函数morphologyEx      cv2.MORPH_BLACKHAT, 黑帽

k = np.ones((5,5),np.uint8)

r = cv2.morphologyEx(o,cv2.MORPH_CLOSE,k)

 

29、图像梯度,sobel算子

计算不同方向的梯度  G = |Gx| + |Gy|

             -1    0    1                         p1    p2    p3

Gx   =   -2    0    2            *            p4    p5    p6

             -1    0    1                         p7    p8    p9

P5x = (p3-p1) + 2*(p6-p4) + (p9-p7)   右边这一列减去左边这一列,差值越大,说明这是一个边界

             -1    -2    -1                         p1    p2    p3

Gy   =   0      0     0            *            p4    p5    p6

             1      2     1                         p7    p8    p9

P5y = (p7-p1) + 2*(p8-p2) + (p9-p3)   下边这一列减去上边这一列,差值越大,说明这是一个边界

整体的梯度值先计算平方和再计算平方根: G=(Gx^2 +Gy^2)开平方根    为了简化直接用  G = |Gx| + |Gy| ,即直接计算两个方向上的梯度的绝对值的和就可以了

P5sobel = |p5x|+|p5y|,这是针对p5这点的,实际上每一点都是这样去计算的。

 

30、图像梯度,sobel算子函数及其使用

dst = cv2.Sobel( src, ddepth, dx, dy, [ksize] )     dst,计算结果    src,原始图像      ddepth,处理结果图像深度,通常情况下,可以将该参数的值设置为-1,让处理结果与原始图像保持一致      dx,x轴方向,计算x方向的边界      dy,y轴方向,计算y方向的边界      ksize,核大小

计算sobel结果,分别计算dx和dy后相加

计算y轴方向的梯度,dx=0,dy=1   x轴与之相反。

白色图像像素255,黑色像素是0。水平梯度上某元素左侧与右侧差值为0则不是边界,差值不为0是边界,边界值为负数处理为0计算不出来,所以边界取绝对值。

dst = cv2.convertScaleAbs( src [, alpha[, beta]])   #转回unit8

dst = cv2.addWeighted( src,alpha,src2,beta,gamma )  

cv2.CV_64F

 

opencv+python (2)

标签:边界值   中心   默认   否则   开平   scale   参数   ima   size   

原文地址:https://www.cnblogs.com/lely/p/9230608.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!