我正在做一个文本识别项目,需要从图像中检测和识别文本。 图像中有两个短行文本(320px*320px)。第一行是国家代码的缩写。第二行是拨号代码。整个图像可以任意角度旋转。下面是一些例子。在
形象一
图像二
图像三
由于文本很短,像hough变换(检测长线)、fourier变换和轮廓投影等方法不能很好地实现。我使用轮廓检测来检测文本块的角度。但是,如果文本块是三角形的,则不能很好地工作。另外,如果文本块是矩形的,反扭曲后的文本将变成上下、左下和右下。有人能建议一下吗?在
file = r"/home/hank/Desktop/af_36.jpg"
image = cv2.imread(os.path.normpath(file))
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (3, 3), 0)
_, thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
dilation = cv2.dilate(thresh, kernel, iterations=1)
contours, hierarchy = cv2.findContours(dilation, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contours = [contours[i] for i in range(len(contours)) if
not (hierarchy[0][i][3] >= 0 and hierarchy[0][i][2] == -1)]
angles = []
for cnt in contours:
rect = cv2.minAreaRect(cnt)
angles.append(rect[2])
angle = sum(angles)/len(angles)
print(angle)
不如不检测文本,试着检测两个文本之间的间隔(上下)。在
(1)最ez路。在
设置图像的阈值以查找文本(word=1而word=0。然后找到这个盒子的中心点。中间点x和y应该是空白。在
试着旋转一条以中间点为中心的线(长度相同),宽度jsut会很好地接触顶部和底部的文本。最大非零像素数(表示线条与文本不重叠)为1的结果应为文本所在的角度。在
(2)使用旧的人脸检测路由。 使用耙状图案,在N个旋转角度下与模板匹配。在
所有x,y,角度的For循环
然后逐步完善。在
例如,这是0角版的harr功能。通过模板匹配将其与图像对齐。然后对齐旋转的图案,在上一个角度模板上加上匹配图像。连接所有模板匹配结果并运行最小-最大值以找到最高的回报
相关问题 更多 >
编程相关推荐