OpenCV图像识别技术-验证码识别之前置基础

目录

一、opencv基础操作

二、修改图像像素与色彩

三、修改图像regionofinterest指定区域

四、图像数值运算、二值化处理

五、图像平滑处理

六、形态学图像处理

七、滑块验证码的基础:模板匹配


一、opencv基础操作

1.安装opencv:终端:pip install opencv-python

2.创建py文件,输入如下代码

import cv2 as cv

# 全彩形式
img = cv.imread('./img/bg.jpg', flags=cv.IMREAD_COLOR)
# img为三维矩阵(红绿蓝通道三个颜色),一个二维矩阵代表每一行的像素的值
# print(img)

# 灰色形式(黑白图片)
img = cv.imread('./img/bg.jpg', flags=cv.IMREAD_GRAYSCALE)
# img为二维矩阵,一个一维矩阵代表每一行的像素的值
# print(img)
# 保存新图片
cv.imwrite('./img/bg_grayscale.jpg', img)
cv.imshow("myImg",img)

# 按下任何一个按键可以终止显示
cv.waitKey(0)
# 终止显示
cv.destoryAllWindows()

二、修改图像像素与色彩

1.安装numpy:pip install numpy

2.书写如下代码

import cv2
import numpy

# 现在是全黑色
img = numpy.zeros((200,200), numpy.uint8)
print(img)
# 在中间加一条白色的线
for i in range(200):
    img[100][i] = 255
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2

img = cv2.imread('./img/bg.jpg',flags = cv2.IMREAD_COLOR)
# 加一条竖直红色的线
for i in range(len(img)):
    这个颜色排序是BGR
    img[i][100] = [0,0,255]
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

三、修改图像regionofinterest指定区域

import cv2

img = cv2.imread('./img/bg.jpg',flags = cv2.IMREAD_COLOR)
# 设置区域
roi = img[100:300, 100:300]
# 只展示区域
cv2.imshow("img", roi)

# 修改区域
img[100:300, 100:300] = [255,255,255]
cv2.imshow("img", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

四、图像数值运算、二值化处理

import cv2
import numpy

img = cv2.imread('./img/bg.jpg',flags = cv2.IMREAD_COLOR)
print(img.shape)
# (500,800,3)

cover = numpy.ones((500,800,3), numpy.uint8)*50
print(cover)

result1 = cv2.add(img, cover)
result2 = cv2.subtract(img, cover)

cv2.imshow("img", result1)
cv2.imshow("img4", result2)
cv2.imshow("img2", img)
cv2.imshow("img3", cover)
cv2.waitKey(0)
cv2.destroyAllWindows()
import cv2
import numpy

img = cv2.imread('./img/bg.jpg',flags = cv2.IMREAD_GRAYSCALE)
# 二值化, 设置阈值(180),超出180的部分更改为220,低于180的部分全变成0
thresh, result = cv2.threshold(img, 180, 220, cv2.THRESH_BINARY)
# 像素值全是0/1
print(result)

# 二值化,进行反转,低出180的部分更改为220,高于180的部分全变成0
thresh, result = cv2.threshold(img, 180, 220, cv2.THRESH_BINARY_INV)

# 二值化,超出180的部分不变(220的影响无影响),低于180的部分全变成0
thresh, result = cv2.threshold(img, 180,220, cv2.THRESH_TOZERO)

# 二值化,进行反转,低出180的部分不变,高于180的部分全变成0
thresh, result = cv2.threshold(img, 180, 220, cv2.THRESH_TOZERO_INV)

# 二值化,超出180的部分删去(都变成180,设置为阈值),低于180的部分不变
thresh, result = cv2.threshold(img, 180, 220, cv2.THRESH_TRUNC)

# 亮的地方全变成白,暗的地方全变成黑
cv2.imshow("img", img)
cv2.imshow("img2", result)

cv2.waitKey(0)
cv2.destroyAllWindows()

五、图像平滑处理

import cv2
import numpy

img = cv2.imread('./img/bg.jpg',flags = cv2.IMREAD_COLOR)
cv2.imshow("img", img)

# kernel 对此点像素周围的5*5这个范围做平均值处理
result = cv2.blur(img, (5,5))
cv2.imshow("img2", result)

# kernel 对此点像素周围的5*5这个范围,根据像素的权重,越靠近像素中心的权重更大,图像更清晰
result2 = cv2.GaussianBlur(img, (5,5), 1)
cv2.imshow("img3", result2)


cv2.waitKey(0)
cv2.destroyAllWindows()

六、形态学图像处理

import cv2
import numpy

# 纯黑背景
img1 = numpy.zeros((500,500), numpy.uint8)
# 此区域为纯白
img1[160:340, 160:340] = 255
# 此区域为纯黑
img1[230:270, 230:270] = 0

kernel = numpy.ones((20,20), numpy.uint8)
# (腐蚀状态)在像素点的20*20范围内,假如周围有黑色那么这个像素点就变为黑色
result = cv2.erode(img1, iterations=1, kernel=kernel)

# (扩张状态)在像素点的20*20范围内,假如周围有白色那么这个像素点就变为白色
# iterations=1 指的是循环1次,做一次像素筛选处理。iterations=2指的是在第一次的基础上又做一次处理,效果更明显
result = cv2.erode(img1, iterations=1, kernel=kernel)

cv2.imshow("img1", img1)
cv2.imshow("result", result)

cv2.waitKey(0)
cv2.destroyAllWindows()

七、滑块验证码的基础:模板匹配

import cv2
import numpy

img = cv2.imread('./img/bg.jpg', flags=cv2.IMREAD_GRAYSCALE)
roi = img[150:250, 150:250]

match = cv2.matchTemplate(img, roi, TM_CCORR_NORMED)
info = cv2.minMaxLoc(match)
# 查看相似度的值 (最低匹配相似度,最高匹配相似度,最低匹配的位置,最高匹配的位置)
print(info)
# (0.66........,0.9999......., (354, 400), (150,150))

cv2.imshow("img", img)
cv2.imshow("roi", roi)

cv2.waitKey(0)
cv2.destroyAllWindows()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值