您的位置:首页 > 运维架构

OpenCV位运算实现图像融合

2018-01-31 22:51 1136 查看
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)


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息