OCR文本投影直方图
我们可以对图片进行投影,找到感兴趣区域,尤其对于格式固定,且场景简单的OCR文本,投影直方图是个不错的方法。
环境
python3.6
opencv-python
思路
统计每一行的像素值,观察形状进行分割
代码
- 读入图片,并转成灰度图
image = cv2.imread(图片路径)
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
- 统计每一行的像素值
# 统计一行像素总数
def countX(arr):
count = [0] * len(arr)
for h in range(len(arr)):
count2 = 0
for l in range(len(arr[h])):
count2=count2+255-arr[h, l]
count[h] = count2
return count
- 绘制直方图并保存
plt.barh(arr, count, height=1, color='steelblue', alpha=0.8) # 从下往上画
plt.savefig(直方图路径)
plt.show()
效果
图中基本每个峰,都是一行文本
用红色标出文本部分:
绘制投影直方图完整代码
#coding:utf-8
#author:FengShuo
import cv2
from matplotlib import pyplot as plt
pic='000803_00'
image = cv2.imread('./detect_img/'+pic+'.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 统计一行像素总数
def countX(arr):
count = [0] * len(arr)
for h in range(len(arr)):
count2 = 0
for l in range(len(arr[h])):
count2=count2+255-arr[h, l]
count[h] = count2
return count
count = countX(image)
arr=list(range(len(count)))
plt.barh(arr, count, height=1, color='steelblue', alpha=0.8)
plt.savefig('./detect_img/'+pic+'_bar2.jpg')
plt.show()