OpenCV位运算实现图像融合

OpenCV在计算机视觉处理方面提供了很多强大的工具,使用OpenCV可以很容易的对图像进行各种算数运算,本文主要介绍通过位运算把两张图片融合成一张图片,可用于添加水印等。

      在网上随意找了两张图,一张是google logo,一张是deep learning图片:

google logo
deep learning

     使用OpenCV把google logo作为水印添加到deep learning图上,最终效果如下:

added_img

实现思路

      把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

google_resize

  1. 构建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
mask_inv

  1. 对图像应用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)

google_logo_fg
dl_bg

  1. 图像相加融合,得到最终结果
added_img = cv2.add(google_logo_fg, dl_bg)

added_img

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值