主要应用
import cv2 as cv img1 = cv.imread("1.jpg") img2 = cv.imread("2.jpg") print(img1.shape,img2.shape) img1=cv.resize(img1,(img2.shape[1],img2.shape[0])) image=cv.addWeighted(img1,0.6,img2,0.4,0.0,) cv.imshow('img1',image) cv.waitKey(0) cv.destroyAllWindows()
“主要运用”
import cv2 as cv img1=cv.imread('5.png') img2=cv.imread('6.png') #img1=cv.imread('LinuxLogo.jpg') #img2=cv.imread('WindowsLogo.jpg') dst=cv.add(img1,img2) dst1=cv.subtract(img1,img2) cv.imshow('dst',dst1) cv.imshow('dst1',dst) cv.waitKey(0) cv.destroyAllWindows()
主要应用
图像的局部显示,如:用二值蒙板图像与原图像做乘法
import cv2 as cv img1=cv.imread('5.png') img2=cv.imread('6.png') dst=img1*img2 cv.imshow('181360152',dst) cv.waitKey(0) cv.destroyAllWindows()
import cv2 as cv img1=cv.imread('LinuxLogo.jpg') img2=cv.imread('WindowsLogo.jpg') and_img=cv.bitwise_and(img1,img2) or_img=cv.bitwise_or(img1,img2) not_img=cv.bitwise_not(img1) xor_img=cv.bitwise_xor(img1,img2) cv.imshow('181360152',and_img) cv.imshow('181360152zhang',or_img) cv.imshow('181360152yang',not_img) cv.imshow('181360152-',xor_img) cv.waitKey(0) cv.destroyAllWindows()
import cv2 import math import numpy as np class Img: def __init__(self,image,rows,cols,center=[0,0]): self.src=image #原始图像 self.rows=rows #原始图像的行 self.cols=cols #原始图像的列 self.center=center #旋转中心,默认是[0,0] def Move(self,delta_x,delta_y): #平移 #delta_x>0左移,delta_x<0右移 #delta_y>0上移,delta_y<0下移 self.transform=np.array([[1,0,delta_x],[0,1,delta_y],[0,0,1]]) def Zoom(self,factor): #缩放 #factor>1表示缩小;factor<1表示放大 self.transform=np.array([[factor,0,0],[0,factor,0],[0,0,1]]) def Horizontal(self): #水平镜像 self.transform=np.array([[1,0,0],[0,-1,self.cols-1],[0,0,1]]) def Vertically(self): #垂直镜像 self.transform=np.array([[-1,0,self.rows-1],[0,1,0],[0,0,1]]) def Rotate(self,beta): #旋转 #beta>0表示逆时针旋转;beta<0表示顺时针旋转 self.transform=np.array([[math.cos(beta),-math.sin(beta),0], [math.sin(beta), math.cos(beta),0], [ 0, 0, 1]]) def Process(self): self.dst=np.zeros((self.rows,self.cols),dtype=np.uint8) for i in range(self.rows): for j in range(self.cols): src_pos=np.array([i-self.center[0],j-self.center[1],1]) [x,y,z]=np.dot(self.transform,src_pos) x=int(x)+self.center[0] y=int(y)+self.center[1] if x>=self.rows or y>=self.cols or x<0 or y<0: self.dst[i][j]=255 else: self.dst[i][j]=self.src[x][y] if __name__=='__main__': src=cv2.imread('123.jpg',0) rows = src.shape[0] cols = src.shape[1] cv2.imshow('src', src) img=Img(src,rows,cols,[248,231]) img.Zoom(0.5) #缩放 img.Process() cv2.imshow('dst', img.dst) cv2.waitKey(0)
import cv2 import math import numpy as np class Img: def __init__(self,image,rows,cols,center=[0,0]): self.src=image #原始图像 self.rows=rows #原始图像的行 self.cols=cols #原始图像的列 self.center=center #旋转中心,默认是[0,0] def Move(self,delta_x,delta_y): #平移 #delta_x>0左移,delta_x<0右移 #delta_y>0上移,delta_y<0下移 self.transform=np.array([[1,0,delta_x],[0,1,delta_y],[0,0,1]]) def Zoom(self,factor): #缩放 #factor>1表示缩小;factor<1表示放大 self.transform=np.array([[factor,0,0],[0,factor,0],[0,0,1]]) def Horizontal(self): #水平镜像 self.transform=np.array([[1,0,0],[0,-1,self.cols-1],[0,0,1]]) def Vertically(self): #垂直镜像 self.transform=np.array([[-1,0,self.rows-1],[0,1,0],[0,0,1]]) def Rotate(self,beta): #旋转 #beta>0表示逆时针旋转;beta<0表示顺时针旋转 self.transform=np.array([[math.cos(beta),-math.sin(beta),0], [math.sin(beta), math.cos(beta),0], [ 0, 0, 1]]) def Process(self): self.dst=np.zeros((self.rows,self.cols),dtype=np.uint8) for i in range(self.rows): for j in range(self.cols): src_pos=np.array([i-self.center[0],j-self.center[1],1]) [x,y,z]=np.dot(self.transform,src_pos) x=int(x)+self.center[0] y=int(y)+self.center[1] if x>=self.rows or y>=self.cols or x<0 or y<0: self.dst[i][j]=255 else: self.dst[i][j]=self.src[x][y] if __name__=='__main__': src=cv2.imread('123.jpg',0) rows = src.shape[0] cols = src.shape[1] cv2.imshow('src', src) img=Img(src,rows,cols,[248,231]) img.Move(-30, -50) # 平移 img.Process() cv2.imshow('dst', img.dst) cv2.waitKey(0)
import cv2 import math import numpy as np class Img: def __init__(self,image,rows,cols,center=[0,0]): self.src=image #原始图像 self.rows=rows #原始图像的行 self.cols=cols #原始图像的列 self.center=center #旋转中心,默认是[0,0] def Move(self,delta_x,delta_y): #平移 #delta_x>0左移,delta_x<0右移 #delta_y>0上移,delta_y<0下移 self.transform=np.array([[1,0,delta_x],[0,1,delta_y],[0,0,1]]) def Zoom(self,factor): #缩放 #factor>1表示缩小;factor<1表示放大 self.transform=np.array([[factor,0,0],[0,factor,0],[0,0,1]]) def Horizontal(self): #水平镜像 self.transform=np.array([[1,0,0],[0,-1,self.cols-1],[0,0,1]]) def Vertically(self): #垂直镜像 self.transform=np.array([[-1,0,self.rows-1],[0,1,0],[0,0,1]]) def Rotate(self,beta): #旋转 #beta>0表示逆时针旋转;beta<0表示顺时针旋转 self.transform=np.array([[math.cos(beta),-math.sin(beta),0], [math.sin(beta), math.cos(beta),0], [ 0, 0, 1]]) def Process(self): self.dst=np.zeros((self.rows,self.cols),dtype=np.uint8) for i in range(self.rows): for j in range(self.cols): src_pos=np.array([i-self.center[0],j-self.center[1],1]) [x,y,z]=np.dot(self.transform,src_pos) x=int(x)+self.center[0] y=int(y)+self.center[1] if x>=self.rows or y>=self.cols or x<0 or y<0: self.dst[i][j]=255 else: self.dst[i][j]=self.src[x][y] if __name__=='__main__': src=cv2.imread('123.jpg',0) rows = src.shape[0] cols = src.shape[1] cv2.imshow('src', src) img=Img(src,rows,cols,[248,231]) img.Rotate(-math.radians(180)) #旋转 img.Process() cv2.imshow('dst', img.dst) cv2.waitKey(0)后续
如果想了解更多物联网、智能家居项目知识,可以关注我的项目实战专栏。
或者关注公众号。
编写不易,感谢支持。