13.Opencv中的图像运算

1.两个图像相加

import cv2
import numpy as np

img1 = cv2.imread('C:\\Users\\Mengyang\\Desktop\\123.png')  #加载图片

#图的加法运算就是矩阵的运算
#因此进行加法运算的两张图片的大小要相同

print(img1.shape) #打印图片大小信息

img2 = np.ones((800,1200,3),np.uint8)*50 #每个像素全为1,乘以100

result = cv2.add(img1,img2)  #两个图像相加

cv2.imshow('result',result)
cv2.imshow('orig',img1)

cv2.waitKey(0)

2.两个图像相减

所用API  subtract(A,B)

含义是A-B

相加相减运算,可以使图片变亮或变暗

result = cv2.add(img1,img2)  #两个图像相加,使图片变亮
img3 = cv2.subtract(result,img2)  #两个图像相减,使图片变暗

3.图像乘与图像除

乘 multiply(A,B)   使加的更快

除 divide(A,B)      减的更快

4.图像的溶合

addWeighted(A,alpha,B,bate,gamma)

只有图像大小和通道数一样时才能进行融合

A:加法运算的图像A

B:加法运算的图像B

alpha和bate是A和B在溶合后的分别权重,也就是占比

gamma  静态权重,最后生成的图片所有元素加上gamma

import cv2
import numpy as np

img1 = cv2.imread('C:\\Users\\Mengyang\\Desktop\\111.png')
img2 = cv2.imread('C:\\Users\\Mengyang\\Desktop\\112.png')

print(img1.shape)  #只有图像大小和通道数一样时才能进行融合
print(img2.shape)

result = cv2.addWeighted(img1,0.2,img2,0.8,0)
cv2.imshow('result',result)

cv2.waitKey(0)

运行结果:

 

 5.图像的位运算

5.1 与运算

bitwise_and(img1,img2)

import cv2
from cv2 import bitwise_not
from cv2 import bitwise_and
import numpy as np

#创建一张图片
img = np.zeros((200,200),np.uint8)
img1 = np.zeros((200,200),np.uint8)

img[20:120,20:120] = 255
img1[80:180,80:180] = 255

cv2.imshow('img',img)
cv2.imshow('img1',img1)
#new_img = bitwise_not(img)  #图像非运算
new_img = bitwise_and(img,img1)
cv2.imshow('new_img',new_img)
cv2.waitKey(0)

运算结果:

 

5.2 或运算

bitwise_or(img1,img2)

new_img = cv2.bitwise_or(img,img1)  #图像或运算

运行结果:

  

5.3 非运算

bitwise_not(img)

import cv2
from cv2 import bitwise_not
import numpy as np

#创建一张图片
img = np.zeros((200,200),np.uint8)
img[50:150,50:150] = 255

cv2.imshow('img',img)
new_img = bitwise_not(img)  #图像非运算
cv2.imshow('new_img',new_img)
cv2.waitKey(0)

运行结果:

 

5.4 异或运算

bitwise_xor(img1,img2)

import cv2
import numpy as np

#创建一张图片
img = np.zeros((200,200),np.uint8)
img1 = np.zeros((200,200),np.uint8)

img[20:120,20:120] = 255
img1[80:180,80:180] = 255

cv2.imshow('img',img)
cv2.imshow('img1',img1)
#new_img = bitwise_not(img)  #图像非运算
#new_img = cv2.bitwise_and(img,img1)  #图像与运算
#new_img = cv2.bitwise_or(img,img1)  #图像或运算
new_img = cv2.bitwise_xor(img,img1)  #图像异或运算

cv2.imshow('new_img',new_img)
cv2.waitKey(0)

猜你喜欢

转载自blog.csdn.net/qq_45355603/article/details/124435265