目录
一、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()