文章目录
- 1.腐蚀操作
- 2.膨胀操作
- 3.开运算与闭运算
- 4.梯度运算
- 5.礼帽与黑帽
- 6.计算图像梯度
-
- 6.1. Sobel算子
- 6.2. Scharr算子与 laplacian算子
- 7.图像平滑处理
-
- 7.1.均值滤波
- 7.2.方框滤波
- 7.3.高斯滤波
- 7.4.中值滤波
- 8.图像阈值
- 9.图像灰度化
- 10.Canny边缘检测
1.腐蚀操作
img = cv2.imread('dog.jpg',cv2.IMREAD_GRAYSCALE)
img= cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
(4,4)表示一次操作所腐蚀的范围,iterations:表示腐蚀操作进行多少次
kernel=np.ones((4,4),np.uint8)
erosion=cv2.erode(img,kernel,iterations=5)
plt.imshow(erosion)
plt.show()
![计算机视觉入门(二)_第1张图片](http://img.e-com-net.com/image/info8/e389d9e8b1a5417ca5770b943852fe82.jpg)
2.膨胀操作
kernel=np.ones((4,4),np.uint8)
img_dilate=cv2.dilate(img,kernel,iterations=6)
plt.imshow(img_dilate)
plt.show()
![计算机视觉入门(二)_第2张图片](http://img.e-com-net.com/image/info8/4e084ae2069a4823ace8121a26204be9.jpg)
3.开运算与闭运算
kernel=np.ones((4,4),np.uint8)
opening=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
kernel = np.ones((4, 4), np.uint8)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
4.梯度运算
pie=cv2.imread('img1.jpg')
kernel=np.ones((20,20),np.uint8)
erode=cv2.erode(pie,kernel,iterations=2)
dilate=cv2.dilate(pie,kernel,iterations=2)
res=np.hstack((pie,erode,dilate))
plt.imshow(res)
plt.show()
gradient=cv2.morphologyEx(pie,cv.MORPH_GRADIENT,kernel)
plt.imshow(gradient)
plt.show()
5.礼帽与黑帽
tophat=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
plt.imshow(tophat)
plt.show()
![计算机视觉入门(二)_第3张图片](http://img.e-com-net.com/image/info8/e621ac54517c425f867e2db247a8c202.jpg)
blackhat=cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
plt.imshow(blackhat)
plt.show()
![计算机视觉入门(二)_第4张图片](http://img.e-com-net.com/image/info8/978db62d7ed94d58917f3e07ffa4d084.jpg)
6.计算图像梯度
6.1. Sobel算子
![计算机视觉入门(二)_第5张图片](http://img.e-com-net.com/image/info8/2b7d37edea124af7a4a70b281b08aea7.jpg)
sobelx=cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
plt.imshow(sobelx)
plt.show()
![计算机视觉入门(二)_第6张图片](http://img.e-com-net.com/image/info8/cdad039d8eb84077b22c73c77a6c4349.jpg)
sobelx=cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
sobelx=cv2.convertScaleAbs(sobelx)
plt.imshow(sobelx)
plt.show()
![计算机视觉入门(二)_第7张图片](http://img.e-com-net.com/image/info8/6021ac98d0374ca682410eba2252b1fa.jpg)
sobelx=cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
sobelx=cv2.convertScaleAbs(sobelx)
plt.imshow(sobelx)
plt.show()
![计算机视觉入门(二)_第8张图片](http://img.e-com-net.com/image/info8/19dd27732f784dffa5402c8a919c5a0f.jpg)
sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
sobely = cv2.convertScaleAbs(sobely)
plt.imshow(sobely)
plt.show()
![计算机视觉入门(二)_第9张图片](http://img.e-com-net.com/image/info8/97448e9ff58546f5b03fe45c830f1db6.jpg)
算出x,y 然后将x,y一起算
sobelxy=cv2.addWeighted(sobelx,0.5,sobely,0.5,0)
plt.imshow(sobelxy)
plt.show()
![计算机视觉入门(二)_第10张图片](http://img.e-com-net.com/image/info8/3c38eb72a28944df98a9991a229814b4.jpg)
6.2. Scharr算子与 laplacian算子
![计算机视觉入门(二)_第11张图片](http://img.e-com-net.com/image/info8/f519752301b146ff81a3b29cdbb9123c.jpg)
![计算机视觉入门(二)_第12张图片](http://img.e-com-net.com/image/info8/d02cca0930574ab79891a8a999614af3.jpg)
scharrx=cv2.Scharr(img,cv2.CV_64F,1,0)
scharry = cv2.Scharr(img, cv2.CV_64F, 0, 1)
scharrx=cv2.convertScaleAbs(scharrx)
scharry = cv2.convertScaleAbs(scharry)
scharrxy=cv2.addWeighted(scharrx,0.5,scharry,0.5,0)
plt.imshow(sobelxy)
plt.show()
laplacian=cv2.Laplacian(img,cv2.CV_64F)
laplacian=cv2.convertScaleAbs(laplacian)
plt.imshow(laplacian)
plt.show()
res=np.hstack((sobelxy,scharrxy,laplacian))
plt.imshow(res)
![计算机视觉入门(二)_第13张图片](http://img.e-com-net.com/image/info8/26db4e2a37c14124baec70c31fe7e4c7.jpg)
7.图像平滑处理
7.1.均值滤波
![计算机视觉入门(二)_第14张图片](http://img.e-com-net.com/image/info8/e1f88cda51ea475fa777250978d79e80.jpg)
blur=cv2.blur(img,(3,3))
res = np.hstack((img,blur))
plt.imshow(res)
plt.show()
![计算机视觉入门(二)_第15张图片](http://img.e-com-net.com/image/info8/c7c8d7642939429f8b7fe2a0f14af37a.jpg)
7.2.方框滤波
box=cv2.boxFilter(img,-1,(3,3),normalize=False)
res = np.hstack((img, box))
plt.imshow(res)
plt.show()
![计算机视觉入门(二)_第16张图片](http://img.e-com-net.com/image/info8/bc66a235e8054ad0bf33cf722cb4c338.jpg)
7.3.高斯滤波
aussian=cv2.GaussianBlur(img,(5,5),1)
res = np.hstack((img, aussian))
plt.imshow(res)
plt.show()
![计算机视觉入门(二)_第17张图片](http://img.e-com-net.com/image/info8/673c56d6606648229772043b8a39587b.jpg)
7.4.中值滤波
median=cv2.medianBlur(img,5)
res = np.hstack((img, median))
8.图像阈值
- ret,dst=cv2.threshold(src,thresh,maxval,type)
src:输入图,只能输入单通道图像,一般为灰度图
dst:输出图
thresh:阈值
maxval:当像素值超过阈值(或者小于阈值),所赋予的值
type:二值化(大于取一个值,小于取另一个值)操作的类型,包含五种类型
- THRESH_BINARY:超过阈值部分取maxval,否则为0
- THRESH_BINARY_INV: THRESH_BINARY的反转
- THRESH_TRUNC:大于阈值部分设为阈值,否则不变
- THRESH_TOZERO:大于阈值部分不改变,否则设为0
- THRESH_TOZERO_INV: THRESH_TOZERO的反转
ret,thresh1=cv2.threshold(img,127,255,cv2.THRESH_BINARY)
ret,thresh2=cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
ret,thresh3=cv2.threshold(img,127,255,cv2.THRESH_TRUNC)
ret,thresh4=cv2.threshold(img,127,255,cv2.THRESH_TOZERO)
ret,thresh5=cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)
title=['Original','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']
images=[img,thresh1,thresh2,thresh3,thresh4,thresh5]
for i in range(6):
plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')
plt.title(title[i])
plt.xticks([]),plt.yticks([])
![计算机视觉入门(二)_第18张图片](http://img.e-com-net.com/image/info8/4a5e72041ec646688a622176e1c74fb6.jpg)
![计算机视觉入门(二)_第19张图片](http://img.e-com-net.com/image/info8/e66f8a6860d343c2a7694e3c6c1f3b2d.jpg)
9.图像灰度化
img = cv2.imread('dog.jpg',cv2.IMREAD_GRAYSCALE)
img= cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.imshow(img)
plt.show()
![计算机视觉入门(二)_第20张图片](http://img.e-com-net.com/image/info8/864e7597418d4162847cb5a6543bdcc7.jpg)
10.Canny边缘检测
- 使用高斯滤波,以平滑图像,滤除噪声
- 计算图像中每个像素点的梯度强度和方向
- 应用非极大值(Non-Maximum-Suppression)抑制,以消除边缘检测带来的杂散响应
- 应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘
- 通过抑制孤立的弱边缘最终完成边缘检测
![计算机视觉入门(二)_第21张图片](http://img.e-com-net.com/image/info8/957b4f4306834082a1a8f7aeac21535b.jpg)
![计算机视觉入门(二)_第22张图片](http://img.e-com-net.com/image/info8/4bea5298f5b94e3ebf353dcc5bf06961.jpg)
![计算机视觉入门(二)_第23张图片](http://img.e-com-net.com/image/info8/7dd7fd591a164a0590615ec7d70f8a28.jpg)
![计算机视觉入门(二)_第24张图片](http://img.e-com-net.com/image/info8/113bcb709b7a4e08b7233aac73ed2f7f.jpg)
img = cv2.imread("dog.jpg", cv2.IMREAD_GRAYSCALE)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
v1=cv2.Canny(img,120,250)
v2=cv2.Canny(img,50,100)
res=np.hstack((v1,v2))
plt.imshow(res)
plt.show()
![计算机视觉入门(二)_第25张图片](http://img.e-com-net.com/image/info8/ccbd8f5b807a4940b4555f09abf74566.jpg)