图像的算术运算和逻辑运算

来源:互联网 发布:js 实现文档预览功能 编辑:程序博客网 时间:2024/06/08 18:55

一. 图像加法

cv2.add(img1,img2) 图像矩阵相加,也可以使用Numpy : res=img1+img2
OpenCV 中的加法与 Numpy 的加法有所不同的。 OpenCV 的加法是一种饱和操作,而 Numpy 的加法是一种模操作。
例如,对于100+200,使用cv2.add()函数得到的是255,而使用Numpy 的加法得到的是300%256

cv2.addWeighted(img1,α ,img2, β,γ) 根据不同权重进行矩阵相加
dst = α · img1 + β · img2 + γ (其中α+β+γ = 1)
不同的是两幅图像的权重不同,会给人一种混合或者透明的感觉。

主要应用举例
去除“叠加性”噪音
生成图像叠加效果

注意:两幅图像的大小,类型必须一致
如果操作不同大小的两幅图像,可以通过前面学到的图像ROI进行操作,这样的话只要在较大的图中选择和较小图同样大小的感兴趣区域,就可以进行叠加了

import cv2img1 = cv2.imread("F:/t.jpg")img2 = cv2.imread("F:/e.jpg")#获得较小图片的大小rows,cols,channels = img2.shape#在较大的图上设置ROI区域img11 = img1[0:rows,0:cols]#进行不同权重的相加res = cv2.addWeighted(img11,0.7,img2,0.3,0)cv2.namedWindow("res",cv2.WINDOW_NORMAL)cv2.imshow("res",res)cv2.waitKey()cv2.destroyAllWindows()

这里写图片描述

二. 逻辑运算

import cv2import numpy as np# 画一个正方形Rectangle = np.zeros((300,300),dtype="uint8")cv2.rectangle(Rectangle,(20,20),(280,280),255,-1)# 画一个圆Circle = np.zeros((300,300),dtype="uint8")cv2.circle(Circle,(150,150),150,255,-1)#与,或,非,异或and_img = cv2.bitwise_and(Rectangle,Circle)or_img = cv2.bitwise_or(Rectangle,Circle)not_img = cv2.bitwise_not(Circle)xor_img = cv2.bitwise_xor(Rectangle,Circle)cv2.imshow("and_img",and_img)cv2.imshow("or_img",or_img)cv2.imshow("not_img",not_img)cv2.imshow("xor_img",xor_img)cv2.waitKey()cv2.destroyAllWindows()

这里写图片描述

原创粉丝点击