OpenCV在计算机视觉处理方面提供了很多强大的工具,使用OpenCV可以很容易的对图像进行各种算数运算,本文主要介绍通过位运算把两张图片融合成一张图片,可用于添加水印等。
在网上随意找了两张图,一张是google logo,一张是deep learning图片:
使用OpenCV把google logo作为水印添加到deep learning图上,最终效果如下:
实现思路
把google logo 图片除了google这几个字以外的像素都变为0;把deep learning图片需要嵌入google logo图片的位置上的像素都变为0;那么最后把两张图片像素相加的时候,除了google这几个字,其他的像素值都是deep learning的像素。
实现步骤
1.加载图片,图片相加需要有相同的宽和高,所以先构建一个新的图片google_resize,大小和 dl_img
相同
google_logo = cv2.imread('google.jpg') # google logo 图片
dl_img = cv2.imread('dl.jpg') # deep learning 图片
google_resize = np.ones(dl_img.shape, np.uint8)
google_resize = google_resize * 255 # 白色背景
google_resize[0:google_logo.shape[0], 0:google_logo.shape[1]] = google_logo
- 构建mask和mask_inv图像
google_logo_gray = cv2.cvtColor(google_resize, cv2.COLOR_BGR2GRAY)
# 阈值操作,灰度值大于200的像素点位置赋值255,其他像素点位置赋值0
ret, mask = cv2.threshold(google_logo_gray, 200, 255, cv2.THRESH_BINARY)
# 取反操作,mask中255的像素点值变为0, 值为0的像素点新值为255
mask_inv = cv2.bitwise_not(mask)
- 对图像应用mask
google_logo_fg = cv2.bitwise_and(google_resize, google_resize, mask = mask_inv)
dl_bg = cv2.bitwise_and(dl_img, dl_img, mask = mask)
- 图像相加融合,得到最终结果
added_img = cv2.add(google_logo_fg, dl_bg)