python 去除验证码图片噪音

news/2024/9/22 13:46:37/

在处理验证码图片时,出现噪音,如横线、像素点等问题往往会影响识别率,这里给出一个去除噪音的方法,仅供学习。

import cv2
import os
import numpy as np
import copydef del_noise(img, number):height = img.shape[0]width = img.shape[1]img_new = copy.deepcopy(img)for i in range(1, height - 1):for j in range(1, width - 1):point = [[], [], []]count = 0point[0].append(img[i - 1][j - 1])point[0].append(img[i - 1][j])point[0].append(img[i - 1][j + 1])point[1].append(img[i][j - 1])point[1].append(img[i][j])point[1].append(img[i][j + 1])point[2].append(img[i + 1][j - 1])point[2].append(img[i + 1][j])point[2].append(img[i + 1][j + 1])for k in range(3):for z in range(3):if point[k][z] == 0:count += 1if count <= number:img_new[i, j] = 255return img_newif __name__ == '__main__':img_dir = './img'img_name = os.listdir(img_dir)  # 列出文件夹下所有的目录与文件kernel = np.ones((5, 5), np.uint8)for i in range(len(img_name)):path = os.path.join(img_dir, img_name[i])image = cv2.imread(path)name_list = list(img_name[i])[:-4]print(name_list)if '.' in name_list:print("%s标签错误,请重新标签!" % img_name[i])else:name = ''.join(name_list)# 灰度化# print(image.shape)grayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 二值化result = cv2.adaptiveThreshold(grayImage, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 21, 1)# 去噪声img = del_noise(result, 2)# img = del_noise(img, 2)# img = del_noise(img, 1)# 加滤波去噪im_temp = cv2.bilateralFilter(src=img, d=6, sigmaColor=75, sigmaSpace=75)im_temp = im_temp[1:-1, 1:-1]im_temp = cv2.copyMakeBorder(im_temp, 13, 13, 13, 13, cv2.BORDER_CONSTANT, value=[255])cv2.imwrite('./img_res/%s.jpg' % (name), im_temp)# im_temp.show()print("%s %s.jpg" % (i, name))print("图片预处理完成!")

处理签前后的对比:

若去除不完全,则可以使用多次del_noise方法,或者是提高del_noise函数number参数的值,但是需要调试才知道那个参数才是比较合适的。


http://www.ppmy.cn/news/1504163.html

相关文章

torch的register_forward_hook作用

torch的register_forward_hook作用 register_forward_hook 是 PyTorch 提供的一个方法&#xff0c;用于在模型的前向传播过程中注册一个钩子函数。这个钩子函数可以在前向传播过程中对指定层的输入和输出进行操作或记录。它常用于调试、特征提取或修改模型行为。 以下是 regi…

【CSDN平台BUG】markdown图片链接格式被手机端编辑器自动破坏

bug以及解决方法 现在是2024年8月&#xff0c;我打开csdn手机编辑器打算修改一下2023年12月的一篇文章&#xff0c;结果一进入编辑器&#xff0c;源码就变成了下面这个样子&#xff0c;我起初不以为意&#xff0c;就点击了发布&#xff0c;结果图片全部显示不出来了。 而当我修…

一文带你掌握C++模版

12. C模板 什么是模板 模板编程也可以叫做泛型编程&#xff0c;忽略数据类型的一种编程方式 //求最值问题 int Max(int a,int b) {return a>b?a:b; } double Max(int a,int b) {return a>b?a:b; } string Max(string a,string b) {return a>b?a:b; …

【Axure教程】拖拉拽编辑页面

低代码开发平台通常提供拖拉拽编辑页面的功能&#xff0c;使用户无需编写大量代码即可创建复杂的应用程序和页面。这种平台的特点是通过图形用户界面来进行开发&#xff0c;用户可以拖拽组件到画布上进行布局和配置。 那今天作者就教大家在Axure里怎么制作拖拉拽动态编辑页面的…

【Java】解决如何将Http转为Https加密输出

目录 HTTP转HTTPS一、 获取 SSL/TLS 证书二、 安装证书2.1 Apache2.2 Nginx 三、更新网站配置四. 更新网站链接五. 检查并测试六. 自动续期&#xff08;针对 Lets Encrypt&#xff09; HTTP转HTTPS 将网站从 HTTP 转换为 HTTPS 能够加密数据传输&#xff0c;还能提高搜索引擎排…

SQL查询注意事项

判断字符串长度要用函数CHAR_LENGTH(str)&#xff0c;他会返回字符串的长度&#xff0c;如果使用length(str)函数&#xff0c;在对中文字符或特殊字符时&#xff0c;返回的是在当前编码下该字符的字节数。如在mysql中的utf-8编码情况下&#xff0c;length(&#xffe5;)返回结果…

day_30

452. 用最少数量的箭引爆气球 class Solution:def findMinArrowShots(self, points: List[List[int]]) -> int:points.sort(keylambda x:x[0])r points[0][1]cnt 1for i in points:if i[0] > r:cnt 1r i[1]else:r min(r, i[1])return cnt有趣&#xff0c;之前做过的…

3D魔方lua核心脚本制作

制作不易,请好好欣赏 U→R→F→D→L→B 废话不多说,上脚本 --魔方基本运行程序 --星空露珠优化脚本lua --主核心来自分享 --666 --[=[ #G4=I 1 # 2-----------2------------1 # | U1(0) U2(1) U3(2) | # …