Opencv学习实践(一)——文本框检测

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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值