1.Numpy的使用
import numpy as np
#定义zeros矩阵
black = np.zeros((480,640,3),dtype=np.uint8) #480为高,640为列
print(black)
#定义full矩阵
#480:行的个数,640:列的个数,255:每个元素的值
full = np.full((480,640,3),255,dtype=np.uint8)
#定义单位矩阵,4x4
diag = np.identity(4)
#定义单位矩阵
#5:列的数量,3:行的数量,2:从第一行第3列开始为单位矩阵
martix = np.eye(5,3,key=2)
#去矩阵中的某一小块
roi = img[20:50,40:60]
#取矩阵中的全部
img[:,:] = [0,255,255]
img[:] = [0,255,255]
2.关于画多边形的
pts = np.array(([10,50],[60,40],[450,100]),np.int32) #注意是np,int32
cv2.polylines(black,[pts],True,(0,0,255)) #True是闭合多边形,False是非闭合多边形
cv2.fillPoly(black,[pts],(0,255,255)) #填充刚刚绘制的闭合多边形
3.图像相加减法
import cv2
import numpy as np
#图片的加法运算就是矩阵的加法运算
#因此,两张图片的分辨率要相等
dog = cv2.imread('dog.jpg')
print(dog.shape)
img = np.ones((717, 1275,3),np.uint8) * 10
#加法
result = cv2.add(dog,img)
#减法
result2 = cv2.subtract(dog, img) #dog - img
#乘法
result3 = cv2.multiply(dog,img)
#除法
result4 = cv2.divide(dog,img)
cv2.imshow('add',result)
cv2.waitKey(0)
4.图像融合
import cv2
import numpy as np
dog = cv2.imread('dog.jpg')
cartoon = cv2.imread('cartoon_1.jpg')
#图像融合,最后一个数表示提亮多少个像素
result = cv2.addWeighted(dog,0.7,cartoon,0.3,50)
cv2.imshow('add',result)
cv2.waitKey(0)
5.图像的非操作,可以理解为像素取反
img = np.zeros((200,200,3),np.uint8)
img[50:100,50:100] = (0,0,255)
cv2.imshow('img',img)
运行后的图为
new_img = cv2.bitwise_not(img)
cv2.imshow('new_img',new_img)
运行后的图为
可以看到,黑色变成白色,而红色变成了绿色
6.图像的亦或
new_img = cv2.bitwise_xor(img1,img2)
其中img1为
img2为
new_img为
可以看到,图片的亦或就是取
5.图像的缩放
cv2.resize(src,dst,dsize,fx,fy,interpolation)
interpolation 为缩放算法
INTER_NEAREST 临近插值
INTER_LINEAR 双线性插值 默认
INTER_CUBIC 三次插值
INTER_AREA 效果最好
#使用desize
new_dog = cv2.resize(dog,(1000,1000))
#使用fx,fy
new_dog2 = cv2.resize(dog,None,fx=1.2,fy=1.2)
6.图像的翻转
cv2.flip(img,filpCode)
filpCode == 0 上下翻转
filpCode > 0 左右翻转
filpCode 《 0 上下,左右翻转
7.图像的旋转
cv2.rotate(img,rotateCode)
ROTATE_90_CLOCKWISE 顺时针90
ROTATE_180 顺时针180
ROTATE_90_COUNTERCLOCKWISE 顺时针270
8.仿射变化
图像的画布大小不变,而图像在画布上进行平移,旋转,和缩放变化。
warpAffine(src,M,dsize,flags,mode,value)
dsize:输出尺寸大小
flags:与resize的插值算法一致(默认值)
mode: 边界外推法 (默认值)
value:填充边界的值 (默认值)
import cv2
import numpy as np
dog = cv2.imread('dog.jpg')
h,w,ch = dog.shape
#平移变化,100向右,200向下
M1 = np.float32([[1,0,100],[0,1,200]]) #M为32位高精度
new1 = cv2.warpAffine(dog,M1,(w,h))
#旋转变化,逆时针旋转
M2 = cv2.getRotationMatrix2D((w/2,h/2),1,1)
#画布大小为之前的一半
new2 = cv2.warpAffine(dog,M2,(int(w/2),int(h/2)))
cv2.imshow('new',new1)
cv2.imshow('new2',new2)
cv2.waitKey(0)
9.透视变化
warpPerspective(img,M,dsize)
getPersectiveTransform(src,dst)
代码和输出图像如下:
import cv2
import numpy as np
img = cv2.imread('book.jpg')
cv2.namedWindow('new',cv2.WINDOW_NORMAL)
#原图的四个边角坐标
src = np.float32([[269,819],[459,108],[1590,360],[1314,1237]])
#新图的四个坐标点
dst = np.float32([[0,0],[750,0],[750,1177],[0,1177]])
M = cv2.getPerspectiveTransform(src,dst)
new = cv2.warpPerspective(img,M,(750,1177))
cv2.imshow('orgin',img)
cv2.imwrite('orgin.jpg',img)
cv2.imshow('new',new)
cv2.imwrite('new.jpg',new)
cv2.waitKey(0)