山东大学暑期项目实训(五)
小组处理完部分图片后,发现效果并不理想,于是又去看了论文看看有没有新思路,没想到还真给我发现了一些,以下内容根据所看到的论文方法进行的归纳,论文参考基于卷积神经网络的箱号识别技术 和【python-opencv】17-形态学操作-腐蚀与膨胀
1.字符处理之腐蚀处理
得到的字符结果显示不明显,由于末尾的白框会影响字符的识别,为了提高识别的精确度,对分割后的末尾字符图像进行进一步处理。首先对末尾图像进行腐蚀处理。
- 腐蚀原理:腐蚀的效果是把图片"变瘦",其原理是在原图的小区域内取局部最小值。因为是二值化图,只有0和255,所以小区域内有一个是0该像素点就为0
这样原图中边缘地方就会变成0,达到了瘦身目的
OpenCV中用cv2.erode()函数进行腐蚀,只需要指定核的大小就行:
img = cv2.imread('j.bmp', 0)
kernel = np.ones((5, 5), np.uint8)
erosion = cv2.erode(img, kernel) # 腐蚀
这个核也叫结构元素,因为形态学操作其实也是应用卷积来实现的。
结构元素可以是矩形/椭圆/十字形,可以用cv2.getStructuringElement()来生成不同形状的结构元素,比如:
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) # 矩形结构
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)) # 椭圆结构
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5)) # 十字形结构
2.字符处理之中值滤波处理
- 腐蚀过后的图像无论是箱号字符还是边框都只剩下骨架,有些边框甚至已经看不清了。之后再用中值滤波对图像进行过滤进一步去除干扰
3.字符处理之膨胀处理
- 膨胀与腐蚀相反,取的是局部最大值,效果是把图片"变胖":
dilation = cv2.dilate(img, kernel) # 膨胀
4.膨胀之后的操作——继续二值化
经过膨胀过后,图像已经基本恢复了其原有的大小,但对比度还有待提升,为了
提升对比度,可以对图像进行二值化处理,一般图像进过二值化处理后,强显示
的地方会更强,而弱显示的地方将会更弱,即强者更强,弱者更弱,这样就可以
突出图像中需要获取的信息
5.开/闭运算
5.1开操作=腐蚀+膨胀,其作用是:分离物体,消除小区域。这类形态学操作用cv2.morphologyEx()函数实现:
5.2闭运算= 先膨胀+腐蚀(先膨胀会使白色的部分扩张,以至于消除/"闭合"物体里面的小黑洞,所以叫闭运算)
5.3二者作用
6.总结
感谢论文参考[基于卷积神经网络的箱号识别技术]和【python-opencv】17-形态学操作-腐蚀与膨胀提供的思路,图像字符处理后期希望能找到更优化的方法。