Opencv学习(一)按位操作

学习opencv的按位操作时对代码的理解

下面是两张素材
在这里插入图片描述logo
这是最后结果
在这里插入图片描述

下面是代码
import cv2
import numpy as np

#按位运算 
# Load two images
img2 = cv2.imread('6.jpg')
img1 = cv2.imread('2.jpg')
# 创建大图切割区域roi, 区域大小为logo的大小
rows,cols,channels = img2.shape
roi = img1[0:rows, 0:cols ]
cv2.namedWindow("roi",0)
cv2.imshow("roi",roi)

在这里插入图片描述

# 创建一个图片,把logo变成灰度图
img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
#固定阈值二值化,把图变成非黑即白的黑白图 mask是得到的黑白掩模
ret, mask = cv2.threshold(img2gray, 200, 255, cv2.THRESH_BINARY)
cv2.namedWindow("mask",0)
cv2.imshow("mask",des)

在这里插入图片描述
按位与操作, 因为黑色是0 ,白色是255 。所以,掩模mask,roi在与操作以后,新图img1_bg掩模黑色的部分全部变成黑色;白色的部分全部变成roi

#  得到彩色底 黑色logo图
img1_bg = cv2.bitwise_and(roi,roi,mask = mask)
cv2.namedWindow("1+mask=img1_bg",0)
cv2.imshow("1+mask=img1_bg",img1_bg)

在这里插入图片描述

#得到一张mask_inv 反黑白掩模图
mask_inv = cv2.bitwise_not(des)
cv2.namedWindow("mask_inv",0)
cv2.imshow("mask_inv",mask_inv)

在这里插入图片描述
logo和inv_mask进行与操作

# 下面得到黑底彩色logo图
cv2.namedWindow("img2",0)
cv2.imshow("img2",img2)
img2_fg = cv2.bitwise_and(img2,img2,mask = mask_inv)
cv2.namedWindow("2+mask_inv=img2_fg",0)
cv2.imshow("2+mask_inv=img2_fg",img2_fg)

在这里插入图片描述
下面是add操作 。因为黑色是0,所以 img1_bg的黑色部分,全部变成img2_fg相应的部分。img2_fg的黑色部分,全部变成img1_bg相应的部分。
得到的dst 大小是原来roi的大小

dst = cv2.add(img1_bg,img2_fg)
cv2.namedWindow("dst",0)
cv2.imshow('dst',dst)

在这里插入图片描述
然后,把这张小图替换到大图相应的位置

img1[0:rows, 0:cols ] = dst
cv2.namedWindow("res",0)
cv2.imshow('res',img1)

在这里插入图片描述
总结一下就是:
掩模mask 与 roi = img1_bg (img2大小,logo部分为黑色的图)
反掩模inv_mask 与 img2 = img2_fg(img2大小,除彩色logo部分外均为黑色的图)
img1_bg + img2_fg = dst(img2大小,有彩色logo的图)
最后,原图中某部分替换为dst得到新图res

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值