网站跳转至手机端如何做,企业网站搜索引擎推广方法,湖南省建设厅建管处,免费关键词搜索工具1 图像的算术运算 1.1 图像的加法运算 1.2 图像的减法运算 1.3 图像的融合 2 OpenCV的位运算 2.1 非操作 2.2 与运算 2.3 或和异或 1 图像的算术运算 1.1 图像的加法运算
add opencv使用add来执行图像的加法运算
图片就是矩阵, 图片的加法运算就是矩阵的加法运算, 这就要求加…1 图像的算术运算 1.1 图像的加法运算 1.2 图像的减法运算 1.3 图像的融合 2 OpenCV的位运算 2.1 非操作 2.2 与运算 2.3 或和异或 1 图像的算术运算 1.1 图像的加法运算
add opencv使用add来执行图像的加法运算
图片就是矩阵, 图片的加法运算就是矩阵的加法运算, 这就要求加法运算的两张图shape必须是相同的.
# 图片加法
import cv2cat cv2.imread(./cat.jpeg)
dog cv2.imread(./dog.jpeg)# 加法要求两个图片大小一致
print(cat.shape)
print(dog.shape)
# 把猫的图片变小
# 注意坑. opencv中resize中传递新的宽度和高度, 先宽度再高度, 所有是先列后行, 和shape的输出反了.
new_cat cv2.resize(cat, (dog.shape[:-1][::-1]))
# 和单个数字运算, 超过255 会被截断, 相当于 % 256
print(new_cat[0:5, 0:5])
print(new_cat[0:5, 0:5] 100)
cv2.imshow(cat_dog, np.hstack((new_cat, dog)))
# 加法, 加法的效果是加起来如果超过255, 统一变成255
new_img cv2.add(new_cat, dog)
print(new_img[0:5, 0:5])
cv2.imshow(cat_dog, np.hstack((new_cat, dog, new_img)))cv2.waitKey(0)
cv2.destroyAllWindows()1.2 图像的减法运算 subtract opencv使用subtract来执行图像的减法运算, 图像对应位置的元素相减, 如果减完小于0, 统一变成0. # 图片减法import cv2cat cv2.imread(./cat.jpeg)dog cv2.imread(./dog.jpeg)# 加法要求两个图片大小一致print(cat.shape)print(dog.shape)# 把猫的图片变小# 注意坑. opencv中resize中传递新的宽度和高度, 先宽度再高度, 所有是先列后行, 和shape的输出反了.new_cat cv2.resize(cat, (dog.shape[:-1][::-1]))# 减法new_img cv2.subtract(new_cat, dog)print(new_cat[0:5, 0:5], dog[0:5, 0:5])print(new_img[0:5, 0:5])cv2.imshow(cat_dog, np.hstack((new_cat, dog, new_img)))cv2.waitKey(0)cv2.destroyAllWindows()同样的还有乘法, 除法运算. cv2.mutiply, cv2.divide, 原理是类似的. 1.3 图像的融合 cv2.addWeighted(src1, alpha, src2, beta, gamma) 图片的融合操作相当于对图片进行线性运算 w1* x1 w2 * x2 b. 其中alpha是第一个权重参数, beta是第二个权重参数, gamma是偏差. import cv2cat cv2.imread(./cat.jpeg)
dog cv2.imread(./dog.jpeg)new_cat cv2.resize(cat, (dog.shape[:-1][::-1]))
# 相当于res new_cat * 0.4 dog * 0.6 0
res cv2.addWeighted(new_cat, 0.4, dog, 0.6, 0)cv2.imshow(cat_dog, np.hstack((new_cat, dog, res)))cv2.waitKey(0)
cv2.destroyAllWindows()2 OpenCV的位运算 2.1 非操作 bitwise_not(img) 非操作的效果就相当于是用 255 - img import cv2
import numpy as npcat cv2.imread(./cat.jpeg)
dog cv2.imread(./dog.jpeg)cat_not cv2.bitwise_not(cat)
cat_not_not cv2.bitwise_not(cat_not)
cv2.imshow(not, np.hstack((cat, cat_not, cat_not_not)))
print(cat[:3, :3])
print(cat_not[:3, :3])
print(cat_not_not[:3, :3]cv2.waitKey(0)
cv2.destroyAllWindows()2.2 与运算 bitwise_and(img1, img2) 与运算, 图片对应位置元素进行与操作. 表现出来的效果就是黑和黑与还是黑, 白和白与还是白. import cv2
import numpy as npcat cv2.imread(./cat.jpeg)
dog cv2.imread(./dog.jpeg)new_cat cv2.resize(cat, (dog.shape[:-1][::-1]))
cat_and_dog cv2.bitwise_and(new_cat, dog)
cv2.imshow(not, np.hstack((new_cat, cat_and_dog)))
print(cat:, new_cat[:3, :3])
print(-----------)
print(dog:, dog[:3, :3])
print(-----------)
print(cat_and_dog[:3, :3])cv2.waitKey(0)
cv2.destroyAllWindows()2.3 或和异或 bitwise_or 或运算 对应元素做或运算 bitwise_xor 异或运算 对应元素做异或运算 import cv2
import numpy as np#创建一张图片
img np.zeros((200,200), np.uint8)
img2 np.zeros((200,200), np.uint8)img[20:120, 20:120] 255
img2[80:180, 80:180] 255#new_img cv2.bitwise_bit(img)
#new_img cv2.bitwise_and(img, img2)
#new_img cv2.bitwise_or(img, img2)
new_img cv2.bitwise_xor(img, img2)cv2.imshow(new_img, new_img)
cv2.imshow(img, img)
cv2.imshow(img2, img2)
cv2.waitKey(0)