opencv博客汇:
1.阈值处理和轮廓检测
1.0 阈值轮廓的实践
前言:
本文为Opencv学习笔记(一)—阈值处理和轮廓检测 的一个实践版本。
对理论不熟悉的可以跳转:
Opencv学习笔记(一)—阈值处理和轮廓检测
本代码环境要求:
在ubuntu下
pycharm下 opencv4.0.X
(如果想在windows下运行,可以通过改部分代码来实现)
目前文本检测仅在规则的屏幕渲染文本上实验过,在场景文本上自适应性不一定好
这里仅给出了代码,部分检测图像在github上提供,后续的更新代码也将在github上提供。
github地址:https://github.com/simplify23/OCR-learnning
效果图展示:
源代码展示:
# coding: utf-8
import cv2
import os
import shutil
import math
import numpy as np
folder = 'data/'
show_resize = 3
print(os.getcwd()) #返回当前工作目录
class Rect:
'''
矩形类
'''
startx = 0
endx = 0
starty = 0
endy = 0
def __init__(self):
pass
def __str__(self):
return '%d %d %d %d' % (self.startx, self.starty, self.endx, self.endy)
def find_contours(filename):
'''
对图像进行连通域检测,找到图像中的文字区域
:param filename:图像名
:return:包含连通域矩形框的列表
'''
# 获取包含矩阵信息的list
result = thre(filename=filename, is_adapteive=False, thre_value=70)
#img_show(result, window_name='thre', resize=show_resize)
cv2.imwrite(folder + 'temp/thre.jpg', result)
# cv2.bitwise_not(result, dst) #位运算,非
# 膨胀
dst = cv2.Canny(result, 100, 100, 3) #连通域检测:输入图 maxval minval 卷积大小(默认为3)
#img_show(dst, window_name='dst', resize=show_resize)
element = cv2.getStructuringElement(cv2.MORPH_CROSS, (25, 20)) #获取十字结构元素25*20
dilated = cv2.dilate(dst, element)
#img_show(dilated, window_name='dilated', resize=show_resize)
# 轮廓检测: 输入图 轮廓检测办法(外边缘检测) 近似办法
#contours, hierarchy = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
#opencv3
image, contours, hierarchy = cv2.findContours(dilated, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
rect_list = []
for i in contours:
first = i[0]
rect = Rect()
rect.startx = first[0][0]
rect.endx = first[0][0]
rect.starty = first[0][1]
rect.endy = first[0][1]
for x in i:
rect.startx = min(x[0][0], rect.startx)
rect.endx = max(x[0]