前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python-OpenCV(4)

Python-OpenCV(4)

作者头像
GavinZhou
发布2018-01-02 15:22:36
4930
发布2018-01-02 15:22:36
举报

我想把 NBA 的标志放到另一幅图像(LBJ传球)上。但是现在有个问题: 如果我使用加法,颜色会改变,如果使用混合,会得到透明效果,但是我不想要透明的 于是我们可以通过下面的按位运算实现:

cv2.bitwise_and() cv2.bitwise_or() cv2.bitwise_xor() cv2.bitwise_not()

这些API的意思,就是你看到的,AND、OR、XOR、NOT 二值运算,相信这些大家肯定都懂

代码:

代码语言:javascript
复制
__author__ = 'gavinzhou'
# -*- coding: utf-8 -*-

import cv2

# read the images
im1 = cv2.imread("./images/1.png")
im2 = cv2.imread("./images/logo.jpg")

# show the original images
cv2.imshow("IM1", im1)
cv2.imshow("IM2", im2)

# set the ROI
roi = im1[0:im2.shape[0], 0:im2.shape[1], :]
cv2.imshow("ROI", roi)

# create mask of the im2
im2_gray = cv2.cvtColor(im2, cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(im2_gray, 180, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)

# get the bg and fg image of im2
im2_bg = cv2.bitwise_and(roi, roi, mask=mask_inv)
im2_fg = cv2.bitwise_and(im2, im2, mask=mask)

# add the roi to fg image
im_dst = cv2.add(im2_bg, im2_fg)

# set the image region to im1
im1[0:im2.shape[0], 0:im2.shape[1], :] = im_dst

# show all the images
cv2.imshow("IM2_BG", im2_bg)
cv2.imshow("IM2_FG", im2_fg)
cv2.imshow("FIN_FG", im1)
cv2.waitKey(9000)
cv2.destroyAllWindows()

结果: 原始的小图(im1和im2)

原始的图片
原始的图片

roi和bg和fg

最终结果

结果上看的出来,我已经把NBA的logo放到了LBJ的图上,这种效果就类似与PS的图层效果,一层归一层互不影响,如果使用加法会改变原来的颜色,混合则会产生透明,对于图层的效果,使用位运算是最好的

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-04-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com