cv.imread(“1.jpg”,1):彩色读图
cv.imread(“1.jpg”,0):灰度读图
cv.imread(“1.jpg”,-1):读图包含alpha通道,即透明度
Opencv采用BGR通道存储图像
matplotlib以RGB通道显示,所以显示图片要翻转通道
使用plt.imshow(img[:,:,::-1])或者cv2.cvtColor(img , cv2.COLOR_BGR2RGB)转换
lena = cv2.imread("img.jpg")
#lena = cv2.cvtColor(lena , cv2.COLOR_BGR2RGB)
plt.imshow(lena[:,:,::-1])
plt.show()
#cv2.imshow("image", lena)
#cv2.waitKey(0)
img= np.zeros((512,512,3),np.uint8)
cv2.line(img,(0,0),(511,511),(255,0,0),5)
cv2.circle(img,(256,256),60,(0,0,255),-1)
cv2.rectangle(img,(100,100),(400,400),(0,255,0),5)
cv2.putText(img,"hello",(100,150),cv2.FONT_HERSHEY_DUPLEX,5,(255,255,255),3)
plt.imshow(img[:,:,::-1])
plt.show()
img= cv2.imread(".\\20220822162647.jpg")
px=img[11,1,0]
img[0,0]=[255,255,255]
plt.imshow(img[:,:,::-1])
plt.show()
图像大小
col,row= img.shape
通道拆分
b,g,r=cv.split(img)
通道合并
img=cv.merge(b,g,r)
色彩空间改变
BRG—》灰度
gray=cv.cvtColor(img,cv.COLOR_BGR2GRAY)
BRG—》HSV
hsv=cv.cvtColor(img,cv.COLOR_BGR2HSV)
1)图像的加法
如果图像相加超过255则设置为255,这样有利于图像的叠加
cv.add(img1,img2)
2)图像的混合
dst=aimg1+bimg2+c
img=cv.addWeighted(img1,0.7,img2,0.3,0)
3)图像的缩放
cv2.resiize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR)
dsize:绝对尺寸
fx,fy:相对尺寸,将dsize设置为None,然后将fx和fy设置为比例因子即可
interpolation:插值方法
img= cv2.imread(".\\20220822162647.jpg")
a=img.shape[:3]
img2=cv2.resize(img,None,fx=0.05,fy=0.05)
plt.imshow(img2[:,:,::-1])
plt.show()
img= cv2.imread(".\\20220822162647.jpg")
col,row= img.shape[:2]
M=np.float32([[1,0,100],[0,1,50]])
img2=cv2.warpAffine(img,M,(col*2,row*2))
plt.imshow(img2[:,:,::-1])
plt.show()
5)图像的旋转
opencv中旋转分为两步:
1.生成旋转矩阵
M=cv2.getRotationMatrix2D((col/2,row/2),45,1)
2,使用旋转矩阵进行变换
img2=cv2.warpAffine(img,M,(col,row))
img= cv2.imread(".\\20220822162647.jpg")
col,row= img.shape[:2]
#第一步,确定旋转矩阵
M=cv2.getRotationMatrix2D((col/2,row/2),45,1)
#第二步,进行变换
img2=cv2.warpAffine(img,M,(col,row))
plt.imshow(img2[:,:,::-1])
plt.show()
仿射变换中原图平行的变换后还是平行,点线关系不变,要确定六个参数,所以要找三个点,pst1表示变换前的点,pst2表示变换后的点
img= cv2.imread(".\\20220822162647.jpg")
col,row= img.shape[:2]
#第一步,构造变换矩阵,变换前的点和变换后的点
pst1=np.float32([[50,50],[200,50],[50,200]])
pst2=np.float32([[100,100],[200,50],[100,250]])
#第二步,构造变换矩阵
M=cv2.getAffineTransform(pst1,pst2)
#第三步,进行变换
img2=cv2.warpAffine(img,M,(col,row))
plt.imshow(img2[:,:,::-1])
plt.show()
改变视角,要求八个参数,所以要找四个点,pst1表示变换前的点,pst2表示变换后的点
img= cv2.imread(".\\20220822162647.jpg")
col,row= img.shape[:2]
#第一步,构造变换矩阵,变换前的点和变换后的点
pst1=np.float32([[50,65],[368,52],[28,387],[389,390]])
pst2=np.float32([[150,145],[300,100],[150,290],[310,300]])
#第二步,构造变换矩阵
M=cv2.getPerspectiveTransform(pst1,pst2)
#第三步,进行变换
img2=cv2.warpPerspective(img,M,(col,row))
plt.imshow(img2[:,:,::-1])
plt.show()