【千律】OpenCV基础:通过图像颜色进行文字提取

环境:Python3.8 和 OpenCV

内容:通过图像颜色进行文字提取

文字提取步骤
1.  模糊图片,削弱噪声
2.  获取二值图
3.  形态学操作,完善二值图
4.  轮廓提取,获得字符区域

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt


# 封装图片显示函数
def image_show(image):
    if image.ndim == 2:
        plt.imshow(image, cmap='gray')
    else:
        image = cv.cvtColor(image, cv.COLOR_BGR2RGB)
        plt.imshow(image)
    plt.show()


if __name__ == '__main__':

    # 读取原图
    img_words = cv.imread('words.jpg')

    # 高斯模糊
    img_gaussian = cv.blur(img_words, ksize=(5, 5))

    # 区域颜色
    colors = np.array([[0, 135, 195],
                       [0, 220, 235],
                       [15,  0, 175],
                       [50, 80, 135],
                       [225, 90, 125]])

    # 波动范围
    dis = 40

    # 获取掩码
    masks = []
    for i in range(len(colors)):
        mask = cv.inRange(img_words, colors[i] - dis, colors[i] + dis)
        masks.append(mask)

    # 形态学腐蚀--开运算
    kernel = cv.getStructuringElement(cv.MORPH_RECT, ksize=(3, 3))
    for i in range(len(colors)):
        masks[i] = cv.morphologyEx(masks[i], cv.MORPH_OPEN, kernel)

    # 寻找轮廓
    words = []          # 存储单词
    minArea = 2000      # 最小面积
    for mask in masks:
        cns, hir = cv.findContours(mask, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
        for cnt in cns:
            if cv.contourArea(cnt) > minArea:
                [x, y, w, h] = cv.boundingRect(cnt)
                words.append(mask[y: y + h, x: x + w])

    # 循环显示结果
    for word in words:
        image_show(word)

你可能感兴趣的:(OpenCV基础,opencv,计算机视觉,图像处理)