数字图像处理_011_(铅笔颜色选择,字母提取)

1 实例:字母提取

在这里插入图片描述

步骤:
1.获取图片
2.对图片降低噪声,模糊处理(均值模糊,高斯模糊等)
3.设置结构元并对图片进行形态学处理(开、闭运算)
4.对各个字母进行轮廓提取
5.对轮廓提取后的字母进行边界分割
具体代码实现:

import numpy as np
import matplotlib.pyplot as plt
import cv2 as cv
def show(img):
    if img.ndim==2:
        plt.imshow(img,cmap='gray')
    else:
        img2=cv.cvtColor(img,cv.COLOR_BGR2RGB)
        plt.imshow(img2)
    plt.show()

1.获取图片
2.对图片降低噪声,模糊处理(均值模糊,高斯模糊等)

img=cv.imread("pic/word_family.jpg")
show(img)
img=cv.blur(img,(3,3))#均值滤波
show(img)

3.用颜色范围进行获取各字母掩膜,设置结构元并对图片进行形态学处理(开、闭运算)

d = 20
colors = np.array([ # b, g, r
    [161, 1, 251],
    [0, 224, 243],
    [108, 153, 0],
    [248, 209, 0],
    [225, 84, 117],
    [26, 56, 103],
])
#mask=cv.inRange(img,colors[0]-d,colors[0]+d)

masks=[cv.inRange(img,c-d,c+d) for c in colors]
K=cv.getStructuringElement(cv.MORPH_RECT,(3,3))
masks=[cv.morphologyEx(mask,cv.MORPH_OPEN,K) for mask in masks]
masks=[cv.morphologyEx(mask,cv.MORPH_CLOSE,K) for mask in masks]

4.对各个字母进行轮廓提取
5.对轮廓提取后的字母进行边界分割

words=[]
for m in masks:
    show(m)
    cnts,hiers=cv.findContours(m,cv.RETR_EXTERNAL,cv.CHAIN_APPROX_SIMPLE)
    for cnt in cnts:
        print(cv.contourArea(cnt))
        if cv.contourArea(cnt)>500:
            x,y,w,h=cv.boundingRect(cnt)
            word=m[y:y+h,x:x+w]
            words.append(word)
for word in words:
    show(word)

效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值