近几年开始接触图像处理或者计算机视觉领域的朋友可能对形态学操作比较陌生,毕竟现在最火的是使用深度学习的方法来解决图像的基本问题。不过,这并不是说传统的图像处理方法没有用武之地。首先,熟知基础的图像处理方法是进行原始创新的基石;其次,传统方法的可解释性往往更强,这在一些工业生产中往往是极为重要的。现在很多生产流水线上工件的视觉检验仍然是使用基本的图像处理方法,虽然并不包含多么高深的策略,但是简单实用,鲁棒性高。
1. 二值化
图像的形态学操作包括:腐蚀、膨胀、开运算、闭运算以及梯度运算等等,这些操作都是基于二值图像的。对于彩色图或者灰度图,需要先转换成只有黑白两色的二值图像。OpenCV提供了threashold()函数专门完成这种工作。下面的例子就是将一张RGB的彩色图转换成二值图的示例。
import cv2import matplotlib %matplotlib notebookimport matplotlib.pyplot as pltimg = cv2.imread('../data/bg66/opencv-icon.png')plt.figure(figsize=(10.8, 5.4))# 原图plt.subplot(1,2,1)plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))plt.title('RGB')# 二值化处理plt.subplot(1,2,2)img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)_, img = cv2.threshold(img, 200, 255, 1)plt.imshow(img, cmap ='gray')plt.title('Binary')plt.savefig('../output/bg66/binary.png', dpi=300, bbox_inches='tight')
Output:
2. 腐蚀
腐蚀实际上就是模版与二值图像进行“与”操作,即