OpenCV学习笔记4:核心操作 -- 算数运算

直接上代码,内有注释:

import cv2

'''
图像的算数运算
'''
img1 = cv2.imread('messi.jpg')
img2 = cv2.imread('opencv_logo.jpg')
img3 = cv2.imread('robot.jpg')

#Image Add
#图像相加
addedImage = cv2.add(img2, img3)
cv2.imshow('Added', addedImage)
cv2.imwrite('Added.jpg', addedImage)

#Image Blending
#图像混合,size必须相同
blending = cv2.addWeighted(img3, 0.8, img2, 0.2, 0)
cv2.imshow('Blending', blending)
cv2.imwrite('Blending.jpg', blending)

#Image bitwise
# 图像的位运算
# 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 invers mask also
#灰度化
#灰度图:就是图像的颜色由黑(0)到白(255)的颜色组成,中间是灰色。类似于黑白照片的效果。
img2gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
# 对灰度图进行阙值处理
#像素的颜色值〉200是,设为255(白色),其他则设为0(黑色) =〉黑白图
ret, mask = cv2.threshold(img2gray, 200, 255, cv2.THRESH_BINARY)
#取反,跟mask的黑白色转换
mask_inv = cv2.bitwise_not(mask)

#Now black-out the area of logo in roi
#当mask像素的色值不为0时,roi[i] ^ roi [i];mask像素的色值为0时,则输出0。
#所以表现为在roi上加上mask的黑色部分
img1_bg = cv2.bitwise_and(roi, roi, mask = mask)
#同理,得出在img2上把白色部分变成黑色的图像
img2_fg = cv2.bitwise_and(img2, img2, mask = mask_inv)

#把logo的非白部分加到ROI里
bitwise = cv2.add(img1_bg, img2_fg)
#替换ROI
img1[0:rows, 0:cols] = bitwise
cv2.imshow('img2gray', img2gray)
cv2.imshow('mask', mask)
cv2.imshow('mask_inv', mask_inv)
cv2.imshow('img1_bg', img1_bg)
cv2.imshow('img2_fg', img2_fg)
cv2.imshow('BitWise-ROI', bitwise)
cv2.imshow('BitWise-Result', img1)

cv2.imwrite('img2gray.jpg', img2gray)
cv2.imwrite('mask.jpg', mask)
cv2.imwrite('mask_inv.jpg', mask_inv)
cv2.imwrite('img1_bg.jpg', img1_bg)
cv2.imwrite('img2_fg.jpg', img2_fg)
cv2.imwrite('BitWise-ROI.jpg', bitwise)
cv2.imwrite('BitWise-Result.jpg', img1)

cv2.waitKey(0)
cv2.destroyAllWindows()

-----原图

1.messi



 

2.opencv-logo



 

3.robot



 

-----处理结果

1.图像相加



 

2.图像混合



 

3.图像位运算

3-1.灰度图



 

3-2.mask



 

3-3.mask取反



 

3-4.img1_bg



 

3-5.img2_fg



 

3-6.ROI位运算



 

3-7.最终结果



 

参照:

1.http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_core/py_image_arithmetics/py_image_arithmetics.html#image-arithmetics

2.https://docs.opencv.org/2.4.13.5/modules/core/doc/operations_on_arrays.html#bitwise-and

猜你喜欢

转载自stef.iteye.com/blog/2406516
今日推荐