OpenCV_Python API 官方文档学习_ cv2 图像的算术运算

官方官方文档

Goal

  • Learn several arithmetic operations on images like addition, subtraction, bitwise operations etc.
  • You will learn these functions : cv2.add()cv2.addWeighted() etc.

实现目标:

1. 学习图像上的几个算术运算,如加法、减法、位运算等。

2. 学习函数  cv2.add() ,   cv2.addWeighted() 等函数


添加图像

      可以通过OpenCV函数添加两个图像,cv2.add() 或 简单地通过numpy操作,res = img1 + img2这两个图像都应该具有相同的深度和类型,或者第二个图像可以只是一个标量值。

提示:

      OpenCV加法和Numpy加法有区别。OpenCV加法是一种饱和运算,而Numpy加法是一种模块化运算。

下面代码举例说明上述问题:(这里是Python2语法。如果是P3,则在print后边改成括号就行了)

>>> x = np.uint8([250])
>>> y = np.uint8([10])

>>> print cv2.add(x,y) # 250+10 = 260 => 255
[[255]]

>>> print x+y          # 250+10 = 260 % 256 = 4
[4]

       当您添加两个图像时,它的适用性更好一点(针对于图片来说)。OpenCV函数将提供更好的结果。所以最好还是坚持OpenCV函数。

图像混合

      这是图像加法,但以不同的权重给图像,使它给人一种混合或透明的感觉。图像按以下公式添加:


      通过将alpha通道从0改成1,就可以得到一个图像到另一个图像个很酷的转换。我在这里拍了两张照片,第一个图像的权重为0.7,第二个图像的权重为0.3。cv2.addWeighted() 应用了以下等式

下面代码将演示这一过程:(其中γ取了0)

import cv2

img1 = cv2.imread('1.jpg')
img2 = cv2.imread('2.jpg')

dst = cv2.addWeighted(img1,0.7,img2,0.3,0)

cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

最上面的是合成出来下。下面两个是原始图像。(美轮美奂啊o(* ̄▽ ̄*)o)


按位操作

      包括:按位与、or、not 和 xor操作。在提取图像的任何部分(我们将在后续的内容里剪刀)定义和使用非矩形ROI等时,它们非常有用。下面我们将看到一个如何改变图像的特定区域的例子。我想把OpenCV标志放在图片上方。如果我添加两个图像,它会改变颜色。如果我把它混在一起,我得到的是透明的效果。但我们希望它是不透明的。如果是矩形区域,我可以像上一章那样使用ROI。但是OpenCV标志不是矩形的。因此,您可以按照以下按位操作来完成此操作:

# Load two images
img1 = cv2.imread('messi5.jpg')
img2 = cv2.imread('opencv_logo.png')

# I want to put logo on top-left corner, So I create a ROI
rows,cols,channels = img2.shape
roi = img1[0:rows, 0:cols ]

# Now create a mask of logo and create its inverse mask also
img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray, 10, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)

# Now black-out the area of logo in ROI
img1_bg = cv2.bitwise_and(roi,roi,mask = mask_inv)

# Take only region of logo from logo image.
img2_fg = cv2.bitwise_and(img2,img2,mask = mask)

# Put logo in ROI and modify the main image
dst = cv2.add(img1_bg,img2_fg)
img1[0:rows, 0:cols ] = dst

cv2.imshow('res',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值