opencv--python学习记录(七)

一、形态学

1、形态学概述

        形态学时基于图像形态进行处理的一些基本方法,这些处理方法基本是对二进制图像进行处理,卷积核决定着图像处理后的效果。

        其中形态学图像处理的方法有:腐蚀与膨胀(基础重点);开运算;闭运算;顶帽;黑帽。

2、图像二值化

        将图像的每个像素变成两种值,如0,255;

        二值化分为全局二值化和局部二值化;

(1)全局二值化API:threshold(img, thresh, maxVal, type)

        img最好是灰度图;

        thresh阈值,高于阈值变最大值,低于变0;

        maxVal最大值,

        type包括几种类型,详细看手册;

import cv2
import numpy as np

img = cv2.imread("F:\\tupian\\chinacar.jpeg")
img1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ret,dst = cv2.threshold(img1,  180, 255, cv2.THRESH_BINARY)

cv2.imshow('img',img)
cv2.imshow('img1',img1)
cv2.imshow('dst',dst)
cv2.waitKey(0)

cv2.destroyAllWindows()

         其中thresholdType的几种类型都要学习一下:

(2)自适应阈值(区域二值化)

        由于光照不均匀以及阴影的存在,只有一个阈值会使得在阴影处的白色被二值化成黑色;

 

adaptiThreshold(img, maxVal, adaptiveMethod, type, blockSize,C)

        adaptiveMethod计算阈值的方法,自己得到阈值,一般选择高斯

        Type只有两个是threshold前两个;

        blockSize邻近区域的大小,

        C常量,从计算出的平均值或加权平均值中减去,一般为0

import cv2
import numpy as np

img = cv2.imread('F:\\tupian\\123.png')
img1 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

dst = cv2.adaptiveThreshold(img1,  255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 
                            cv2.THRESH_BINARY, 11, C=0)

cv2.imshow('img',img)
cv2.imshow('img1',img1)
cv2.imshow('dst',dst)
cv2.waitKey(0) 

cv2.destroyAllWindows()

 

3、腐蚀

        卷积核只有在全为白色区域输出才为白色,一般情况其卷积核为全1,

 

 API:erode(img, kernel, iterations=1)

        iterations执行腐蚀的次数;

import cv2
import numpy as np

img = cv2.imread("F:\\tupian\\j.png")

kernel = np.ones((5,5),np.uint8)
dst = cv2.erode(img, kernel, iterations=1)

cv2.imshow('img',img)
cv2.imshow('dst',dst)
cv2.waitKey(0)

cv2.destroyAllWindows()

4、卷积核的类型和获取

(1)getStructuringElement( type,  size)

        卷积核的获取,其中size是卷积核的大小(?、?)

        第一种是全1是我们使用最多的;

        第二种是椭圆类型,

        第三种是十字型

5、膨胀

 API :  dilate(img, kernel , iteration=1)

import cv2
import numpy as np

img = cv2.imread("F:\\tupian\\j.png")

# kernel = np.ones((5,5),np.uint8)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
print (kernel)
dst = cv2.erode(img, kernel, iterations=1)

dst1 = cv2.dilate(dst , kernel, 1)

cv2.imshow('img',img)
cv2.imshow('dst',dst1)
cv2.waitKey(0)

cv2.destroyAllWindows()

6、开运算

        开运算= 腐蚀 + 膨胀(先腐蚀后膨胀)

 API:morphologyEx(img, MORPH_OPEN, kernel)

import cv2
import numpy as np

img = cv2.imread("F:\\tupian\\tophat.png")

# kernel = np.ones((5,5),np.uint8)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (50,50))
# print (kernel)
# dst = cv2.erode(img, kernel, iterations=1)

# dst1 = cv2.dilate(dst , kernel, 1)

dst = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

cv2.imshow('img',img)
cv2.imshow('dst',dst)
cv2.waitKey(0)

cv2.destroyAllWindows()

7、闭运算

        闭运算 = 膨胀 + 腐蚀(先膨胀后腐蚀)

        开运算和闭运算一个消除目标物体外噪点,一个消除目标物体内的噪点。

  API:morphologyEx(img, MORPH_CLOSE, kernel)

import cv2
import numpy as np

img = cv2.imread("F:\\tupian\\dotinj.png")

# kernel = np.ones((5,5),np.uint8)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (9,9))
# print (kernel)
# dst = cv2.erode(img, kernel, iterations=1)

# dst1 = cv2.dilate(dst , kernel, 1)

dst = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

cv2.imshow('img',img)
cv2.imshow('dst',dst)
cv2.waitKey(0)

cv2.destroyAllWindows()

        这里的开运算和闭运算要注意是解决黑底白色物体。

8、形态学梯度运算

        梯度 = 原图 - 腐蚀

  API:morphologyEx(img, MORPH_GRADIENT, kernel)

import cv2
import numpy as np

img = cv2.imread("F:\\tupian\\j.png")

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))

dst = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)

cv2.imshow('img',img)
cv2.imshow('dst',dst)
cv2.waitKey(0)

cv2.destroyAllWindows()

9、顶帽运算

        顶帽 = 原图 - 开运算

 

   API:morphologyEx(img, MORPH_TOPHAT, kernel)

import cv2
import numpy as np

img = cv2.imread("F:\\tupian\\tophat.png")
print (img.shape)

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (19,19))

dst = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)

cv2.imshow('img',img)
cv2.imshow('dst',dst)
cv2.waitKey(0)

cv2.destroyAllWindows()

10、黑帽运算

        黑帽 = 原图 - 闭运算

        顶帽只留目标物体以外的小噪点,黑帽只留目标物体以内的小噪点;

    API:morphologyEx(img, MORPH_BLACKHAT, kernel)

import cv2
import numpy as np

img = cv2.imread("F:\\tupian\\dotinj.png")
print (img.shape)

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (7,7))

dst = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)

cv2.imshow('img',img)
cv2.imshow('dst',dst)
cv2.waitKey(0)

cv2.destroyAllWindows()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值