返回顶部
首页 > 资讯 > 后端开发 > Python >Python图片验证码降噪 — 8邻域降
  • 881
分享到

Python图片验证码降噪 — 8邻域降

邻域验证码降噪 2023-01-30 23:01:14 881人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

简介 图片验证码识别的可以分为几个步骤,一般用 Pillow 库或 OpenCV 来实现,这几个过程是: 1.灰度处理&二值化 2.降噪 3.字符分割 4.标准化 5.识别 所谓降噪就是把不需要的信息通通去除,比如背景,干扰

简介

图片验证码识别的可以分为几个步骤,一般用 Pillow 库或 OpenCV 来实现,这几个过程是:

  • 1.灰度处理&二值化
  • 2.降噪
  • 3.字符分割
  • 4.标准化
  • 5.识别

所谓降噪就是把不需要的信息通通去除,比如背景,干扰线,干扰像素等等,只留下需要识别的字符,让图片变成2进制点阵,方便代入模型训练。

8邻域降噪

8邻域降噪 的前提是将图片灰度化,即将彩色图像转化为灰度图像。以RGN色彩空间为例,彩色图像中每个像素的颜色由R 、G、B三个分量决定,每个分量由0到255种取值,这个一个像素点可以有一千多万种颜色变化。而灰度则是将三个分量转化成一个,使每个像素点只有0-255种取值,这样可以使后续的图像计算量变得少一些。

以上面的灰度图片为例,图片越接近白色的点像素越接近255,越接近黑色的点像素越接近0,而且验证码字符肯定是非白色的。对于其中噪点大部分都是孤立的小点的,而且字符都是串联在一起的。8邻域降噪 的原理就是依次遍历图中所有非白色的点,计算其周围8个点中属于非白色点的个数,如果数量小于一个固定值,那么这个点就是噪点。对于不同类型的验证码这个阈值是不同的,所以可以在程序中配置,不断尝试找到最佳的阈值。

经过测试8邻域降噪 对于小的噪点的去除是很有效的,而且计算量不大,下图是阈值设置为4去噪后的结果:

Pillow实现

下面是使用 Pillow 模块的实现代码:

from PIL import Image


def noise_remove_pil(image_name, k):
    """
    8邻域降噪
    Args:
        image_name: 图片文件命名
        k: 判断阈值

    Returns:

    """

    def calculate_noise_count(img_obj, w, h):
        """
        计算邻域非白色的个数
        Args:
            img_obj: img obj
            w: width
            h: height
        Returns:
            count (int)
        """
        count = 0
        width, height = img_obj.size
        for _w_ in [w - 1, w, w + 1]:
            for _h_ in [h - 1, h, h + 1]:
                if _w_ > width - 1:
                    continue
                if _h_ > height - 1:
                    continue
                if _w_ == w and _h_ == h:
                    continue
                if img_obj.getpixel((_w_, _h_)) < 230:  # 这里因为是灰度图像,设置小于230为非白色
                    count += 1
        return count

    img = Image.open(image_name)
    # 灰度
    gray_img = img.convert('L')

    w, h = gray_img.size
    for _w in range(w):
        for _h in range(h):
            if _w == 0 or _h == 0:
                gray_img.putpixel((_w, _h), 255)
                continue
            # 计算邻域非白色的个数
            pixel = gray_img.getpixel((_w, _h))
            if pixel == 255:
                continue

            if calculate_noise_count(gray_img, _w, _h) < k:
                gray_img.putpixel((_w, _h), 255)
    return gray_img


if __name__ == '__main__':
    image = noise_remove_pil("test.jpg", 4)
    image.show()

OpenCV实现

使用OpenCV可以提高计算效率:

import cv2


def noise_remove_cv2(image_name, k):
    """
    8邻域降噪
    Args:
        image_name: 图片文件命名
        k: 判断阈值

    Returns:

    """

    def calculate_noise_count(img_obj, w, h):
        """
        计算邻域非白色的个数
        Args:
            img_obj: img obj
            w: width
            h: height
        Returns:
            count (int)
        """
        count = 0
        width, height = img_obj.shape
        for _w_ in [w - 1, w, w + 1]:
            for _h_ in [h - 1, h, h + 1]:
                if _w_ > width - 1:
                    continue
                if _h_ > height - 1:
                    continue
                if _w_ == w and _h_ == h:
                    continue
                if img_obj[_w_, _h_] < 230:  # 二值化的图片设置为255
                    count += 1
        return count

    img = cv2.imread(image_name, 1)
    # 灰度
    gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    w, h = gray_img.shape
    for _w in range(w):
        for _h in range(h):
            if _w == 0 or _h == 0:
                gray_img[_w, _h] = 255
                continue
            # 计算邻域pixel值小于255的个数
            pixel = gray_img[_w, _h]
            if pixel == 255:
                continue

            if calculate_noise_count(gray_img, _w, _h) < k:
                gray_img[_w, _h] = 255

    return gray_img


if __name__ == '__main__':
    image = noise_remove_cv2("test.jpg", 4)
    cv2.imshow('img', image)
    cv2.waiTKEy(10000)

--结束END--

本文标题: Python图片验证码降噪 — 8邻域降

本文链接: https://lsjlt.com/news/181030.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python图片验证码降噪 — 8邻域降
    简介 图片验证码识别的可以分为几个步骤,一般用 Pillow 库或 OpenCV 来实现,这几个过程是: 1.灰度处理&二值化 2.降噪 3.字符分割 4.标准化 5.识别 所谓降噪就是把不需要的信息通通去除,比如背景,干扰...
    99+
    2023-01-30
    邻域 验证码 降噪
  • Python图片验证码降噪和8邻域降噪
    目录Python图片验证码降噪 和8邻域降噪一、简介 二、8邻域降噪 三、Pillow实现四、OpenCV实现Python图片验证码降噪 和8邻域降噪 一、简介 图片验证码识别的可...
    99+
    2024-04-02
  • python自动化操作之动态验证码、滑动验证码的降噪和识别
    目录前言一、动态验证码 二、滑动验证码三、验证码的降噪四、验证码的识别总结前言 python对动态验证码、滑动验证码的降噪和识别,在各种自动化操作中,我们经常要遇到沿跳过验...
    99+
    2024-04-02
  • Python图像处理:频域滤波降噪和图像增强
    图像处理已经成为我们日常生活中不可或缺的一部分,涉及到社交媒体和医学成像等各个领域。通过数码相机或卫星照片和医学扫描等其他来源获得的图像可能需要预处理以消除或增强噪声。频域滤波是一种可行的解决方案,它可以在增强图像锐化的同时消除噪声。快速傅...
    99+
    2023-05-14
    Python 图像处理 数学技术
  • python图片验证码生成代码
    本文实例为大家分享了python图片验证码实现代码,供大家参考,具体内容如下 #!/usr/bin/env python # -*- coding: UTF-8 -*- import random ...
    99+
    2022-06-04
    验证码 代码 图片
  • python生成验证码图片代码分享
    本文实例为大家分享了python生成验证码图片代码,分享给大家供大家参考,具体内容如下 基本上大家使用每一种网络服务都会遇到验证码,一般是网站为了防止恶意注册、发帖而设置的验证手段。其生成原理是将一串随机产...
    99+
    2022-06-04
    验证码 代码 图片
  • python生成图片验证码的方法
    背景 在注册或者登陆场景下,经常会遇到需要输入图片验证码的情况,最经典的就是12306买火车票。图片验证码的破解还是有一定难度的,而且如果配合上时间和次数的验证,可以很大程度上防止模...
    99+
    2024-04-02
  • Python系列之图片验证码识别
    Python系列之图片验证码识别 引言 图片验证码已经成为现代网络应用中常见的一种身份验证形式。本文将介绍如何使用 Python 进行图片验证码的识别。我们将使用基于机器学习的方法,通过训练模型来自动...
    99+
    2023-09-07
    python 开发语言
  • Python+Selenium+Pytesseract实现图片验证码识别
    目录一、selenium截取验证码二、安装识别环境pytesseract+Tesseract-OCR验证识别环境是否正常三、处理验证码图片图片处理识别一、selenium截取验证码 ...
    99+
    2024-04-02
  • python 识别图片验证码/滑块验证码准确率极高的 ddddocr 库
    前言 验证码的种类有很多,它是常用的一种反爬手段,包括:图片验证码,滑块验证码,等一些常见的验证码场景。 识别验证码的python 库有很多,用起来也并不简单,这里推荐一个简单实用的识别验证码的库 d...
    99+
    2023-09-05
    python 开发语言 numpy
  • Python中怎么制作一个图片验证码
    这篇文章给大家介绍Python中怎么制作一个图片验证码,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Pillow库Pillow是一个非常强大的图片处理模块,其中Image是Pillow中最为重要的类,实现了Pillow...
    99+
    2023-06-16
  • 在Python web中实现验证码图片代码分享
    系统版本: CentOS 7.4 Python版本: Python 3.6.1 在现在的WEB中,为了防止爬虫类程序提交表单,图片验证码是最常见也是最简单的应对方法之一。 1.验证码图片的生成 ̳...
    99+
    2022-06-04
    验证码 代码 图片
  • 用python登录带弱图片验证码的网站
    目录图片验证码登陆点击个人用户登录获取图片验证码识别并登陆识别较复杂验证码算法其他上一篇介绍了使用python模拟登陆网站,但是登陆的网站都是直接输入账号及密码进行登陆,现在很多网站...
    99+
    2024-04-02
  • Python+Selenium+Pytesseract怎么实现图片验证码识别
    这篇文章给大家介绍Python+Selenium+Pytesseract怎么实现图片验证码识别,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、selenium截取验证码import jsonfrom&nbs...
    99+
    2023-06-26
  • Python实现随机生成图片验证码详解
    使用python生成一个图片验证码,随机的,可以由于验证人机和别的啊,很方便很简单 导入模块 import random from PIL import Image,ImageFon...
    99+
    2024-04-02
  • Python使用PIL库实现验证码图片的方法
    本文实例讲述了Python使用PIL库实现验证码图片的方法。分享给大家供大家参考,具体如下: 现在的网页中,为了防止机器人提交表单,图片验证码是很常见的应对手段之一。这里就不详细介绍了,相信大家都遇到过。 ...
    99+
    2022-06-04
    验证码 方法 图片
  • 怎么用Python实现随机生成图片验证码
    本篇内容主要讲解“怎么用Python实现随机生成图片验证码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Python实现随机生成图片验证码”吧!导入模块import random...
    99+
    2023-06-26
  • 非常简单的Python识别图片验证码实现过程
    很久之前,分享过一次Python代码实现验证码识别的办法。 当时采用的是pillow+pytesseract,优点是免费,较为易用。但其识别精度一般,若想要更高要求的验证码识别,初学...
    99+
    2024-04-02
  • python爬虫模拟登录之图片验证码实现详解
    我们在用爬虫对门户网站进行模拟登录是总会有输入图片验证码的,例如这种 那我们怎么解决这个问题实现全自动的模拟登录呢?只要思想不滑坡,办法总比困难多。我这里使用的是百度智能云里面的文...
    99+
    2024-04-02
  • 如何使用python登录带弱图片验证码的网站
    小编给大家分享一下如何使用python登录带弱图片验证码的网站,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!图片验证码一般都通过加干扰线、粘连或扭曲等方式来增加强...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作