Python-OpenCV(4)

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

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

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

代码:

__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的图层效果,一层归一层互不影响,如果使用加法会改变原来的颜色,混合则会产生透明,对于图层的效果,使用位运算是最好的

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据小魔方

sparklines迷你图系列5——Evolution(Horizon)

今天跟大家分享区域(面积图)图的一个变体——水平线图。 之所以说是面积图的变体,因为这种水平线图,表达的信息与面积图几乎差不多,差别仅仅在图表呈现形式上。 ? ...

2946
来自专栏程序生活

PageRank算法原理与实现

假设一个由4个网页组成的群体:A,B,C和D。如果所有页面都只链接至A,那么A的PR(PageRank)值将是B,C及D的Pagerank总和。

823
来自专栏烙馅饼喽的技术分享

Silverlight像素着色器文字描边效果-改

        上次的描边着色器有两个问题,导致效果不太理想。现在我们来设法改进这两点。 问题一: 当TextBlock的呈现宽度和高度没有正确赋值时,将无法...

2695
来自专栏WOLFRAM

应用案例与新功能小贴士-03

17211
来自专栏24K纯开源

用Qt写软件系列五:一个安全防护软件的制作(3)

引言        上一篇中讲述了工具箱的添加。通过一个水平布局管理器,我们将一系列的工具按钮组合到了一起,完成了工具箱的编写。本文在前面的基础上实现窗体分割效...

1839
来自专栏WOLFRAM

可视化:标签、缩放和排除

1764
来自专栏MixLab科技+设计实验室

生成专属于你的人工智能书【3D生成器】

a-frame 是基于 threejs 的 web AR 库,也可以当 threejs 的简化版本使用,a-frame 只需写 html 标签就可以实现3维空间...

1386
来自专栏HenCoder

HenCoder Android 开发进阶:自定义 View 1-4 Canvas 对绘制的辅助

这期是 HenCoder 自定义绘制的第 1-4 期:Canvas 对绘制的辅助——范围裁切和几何变换。

972
来自专栏数据小魔方

sparklines迷你图系列7——Comparision(+/-Variance)。

今天跟大家分享sparklines迷你图系列的第七篇——Comparision(+/-Variance)。 该图表用于表现指标增长率波动情况,波动范围-100%...

2415
来自专栏邹成卓的专栏

三维变换矩阵的理解

3D空间中的一个点的坐标,可以用(x,y,z)来表示。对这个点的坐标变换有三种操作:缩放、平移、旋转。

7552

扫码关注云+社区