为了账号安全,请及时绑定邮箱和手机立即绑定

使用opencv从验证码中提取字母

使用opencv从验证码中提取字母

慕容708150 2022-08-25 15:31:51
我试图从一个特别烦人的验证码中检索字母。我正在尝试使用opencv2来做到这一点,到目前为止,它并没有给我带来惊人的结果。我可能没有完成正确的操作。
查看完整描述

2 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

使用此代码,您可以获得验证码中的每个字母。

def inverte(imagem, name):
    imagem = (255 - imagem)
    cv2.imwrite(name, imagem)
imagem = cv2.imread(image_file)
inverte(imagem, '2.png')
image_file = '2.png'image = cv2.imread(image_file)
image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
image = cv2.copyMakeBorder(image, 20, 20, 20, 20, cv2.BORDER_REPLICATE)
thresh = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
contours, hierarchy = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
letter_image_regions = []for contour in contours:
    (x, y, w, h) = cv2.boundingRect(contour)    if w / h > 1.25:
        half_width = int(w / 2)
        letter_image_regions.append((x, y, half_width, h))
        letter_image_regions.append((x + half_width, y, half_width, h))    else:
        letter_image_regions.append((x, y, w, h))

letter_image_regions = sorted(letter_image_regions, key=lambda x: x[0])for letter_bounding_box in letter_image_regions:
    x, y, w, h = letter_bounding_box
    letter_image = image[y - 2:y + h + 2, x - 2:x + w + 2]
    letter_image = resize_to_fit(letter_image, 20, 20)
    letter_image = np.expand_dims(letter_image, axis=2)
    letter_image = np.expand_dims(letter_image, axis=0)


查看完整回答
反对 回复 2022-08-25
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

这是调整大小以适应功能


import cv2

import imutils



def resize_to_fit(image, width, height):


    # grab the dimensions of the image, then initialize

    # the padding values

    (h, w) = image.shape[:2]


    # if the width is greater than the height then resize along

    # the width

    if w > h:

        image = imutils.resize(image, width=width)


    # otherwise, the height is greater than the width so resize

    # along the height

    else:

        image = imutils.resize(image, height=height)


    # determine the padding values for the width and height to

    # obtain the target dimensions

    padW = int((width - image.shape[1]) / 2.0)

    padH = int((height - image.shape[0]) / 2.0)


    # pad the image then apply one more resizing to handle any

    # rounding issues

    image = cv2.copyMakeBorder(image, padH, padH, padW, padW,

                               cv2.BORDER_REPLICATE)

    image = cv2.resize(image, (width, height))


    # return the pre-processed image

    return image


查看完整回答
反对 回复 2022-08-25
  • 2 回答
  • 0 关注
  • 115 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号