import cv2
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc",size = 14)
im1 = cv2.imread('D:\pythonb\wx01.jpg')
im2 = cv2.cvtColor(im1,cv2.COLOR_BGR2RGB)
gray = cv2.cvtColor(im1, cv2.COLOR_BGR2GRAY)
ret,im_fixed = cv2.threshold(gray,120,255,cv2.THRESH_BINARY) #ret:阈值; im_fixed:处理结果
图像腐蚀的过程:
a.图像二值化,将图像的灰度值根据阈值进行0,1处理得到的图像;
b.卷积核,对应信号处理中的高低频滤波器。常用numpy去设置,np.ones((m,n), np.uint8) 表示指定m*n的卷积核;
c.图像的腐蚀,cv2.erode(二值化图像, 卷积核, 迭代次数)
原文链接:https://blog.csdn.net/weixin_39128119/article/details/8417238
灰度级中的0表示白色;1表示黑色。将设置的卷积核与原图像做’与’运算,如果都为0,则标志点为0,否则为1。
#设置卷积核:可调节大小
kernel = np.ones((10,10), np.uint8)
f_sh = cv2.erode(im_fixed, kernel,5) #迭代5次
图像膨胀时腐蚀的逆过程,往往先通过腐蚀使图片线条变窄,然后腐蚀可以去除噪声。图像膨胀的处理过程:
a.图像二值化,将图像的灰度值根据阈值进行0,1处理得到的图像;
b.卷积核,对应信号处理中的高低频滤波器。常用numpy去设置,np.ones((m,n), np.uint8) 表示指定m*n的卷积核;
c.图像的腐蚀,cv2.dilate(二值化图像, 卷积核, 迭代次数)
原文链接:https://blog.csdn.net/weixin_39128119/article/details/8417238
卷积核与原图像做’或’运算,如果两者中有一为0,则标志点为0,否则为1
p_zh = cv2.dilate(im_fixed, kernel,5)
q_z = cv2.dilate(f_sh, kernel,5) #把腐蚀处理过的图像再进行膨胀处理
k_ys = cv2.morphologyEx(im_fixed, cv2.MORPH_OPEN, kernel)
#显示图像
titles1 = ["原图","灰度图","二值化处理",'腐蚀处理',"膨胀处理","先腐蚀后膨胀",'开运算']
images1 = [im2,gray,im_fixed,f_sh,p_zh,q_z,k_ys]
for i in range(7):
plt.subplot(2,4,i+1)
plt.imshow(images1[i],'gray') ##"gray"!!!!!!显示的图像中有灰度图!!!!!!
plt.title(titles1[i],FontProperties = font)
plt.xticks([]), plt.yticks([])
plt.show()
运行结果如下:
结果分析:1)腐蚀类似于“领域被蚕食”,将图像中的高亮区域或白色部分进行缩减细化,其运行结果图比原图的高亮区域更小;
2)膨胀类似于“领域扩张”,将图像中的高亮区域或白色部分进行扩张,其运行结果图比原图的高亮区域更大。
3)图6是对图3先进行腐蚀化,再进行膨胀化的操作。图7是直接对图3进行开运算操作,即:cv2.morphologyEx()。两者的运行结果几乎是一致的,开运算可以用来消除小物体、在纤细点处分离物体、平滑较大物体的边界,同时并不明显改变其面积。
这里不再赘述五种阈值化方法的原理,只执行代码进行比较。
运行代码如下:
import cv2
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc",size = 14)
im1 = cv2.imread('D:\pythonb\wx020.jpg')
im2 = cv2.cvtColor(im1,cv2.COLOR_BGR2RGB)
gray = cv2.cvtColor(im1, cv2.COLOR_BGR2GRAY)
ret,thresh1=cv2.threshold(gray,127,255,cv2.THRESH_BINARY) #二进制阈值化
ret,thresh2=cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV) #反二进制阈值化
ret,thresh3=cv2.threshold(gray,127,255,cv2.THRESH_TRUNC) #截断阈值化:>127的像素点变为127,<127的像素点值保持不变
ret,thresh4=cv2.threshold(gray,127,255,cv2.THRESH_TOZERO) #阈值化为0: >127的像素点变为0; <127的像素点值保持不变
ret,thresh5=cv2.threshold(gray,127,255,cv2.THRESH_TOZERO_INV) #反阈值化为0:<127的像素点变为0,>127的像素点值保持不变
#显示结果
titles = ['原图','灰度图','二进制','反二进制','截断','TOZERO','TOZERO_INV']
images = [im2,gray, thresh1, thresh2, thresh3, thresh4, thresh5]
for i in range(7):
plt.subplot(2,4,i+1),plt.imshow(images[i],'gray')
plt.title(titles[i],fontproperties= font)
plt.xticks([]),plt.yticks([])
plt.show()
注意:阈值化处理是在灰度图的基础上操作的
运行结果如下:
(by dxz 2020 03 16 13:50)
一天不学习 电脑落尘灰
接下来准备去学习卷积神经网络了,需要学的知识还有好多好多,这几天看了点理论知识,看是头大,编程操作更是没敢接触,还得搭建框架,配置环境,,,,,任务繁重啊