Python中如何实现opencv图像按位运算,思路方法是什么
Admin 2022-06-17 群英技术资讯 1010 次浏览
关于“Python中如何实现opencv图像按位运算,思路方法是什么”的知识有一些人不是很理解,对此小编给大家总结了相关内容,具有一定的参考借鉴价值,而且易于学习与理解,希望能对大家有所帮助,有这个方面学习需要的朋友就继续往下看吧。 要叠加两张图片,可以用 cv2.add() 函数,相加两幅图片的形状(高度 / 宽度 / 通道数)必须相同。
numpy中可以直接用res = img + img1相加,但这两者的结果并不相同(看下边代码):
add()两个图片进行加和,大于255的使用255计数.
numpy会对结果取256(相当于255+1)的模:
import numpy as np import cv2 x = np.uint8([250]) y = np.uint8([10]) print(cv2.add(x, y)) # 250+10 = 260 => 255 print(x + y) # 250+10 = 260 % (255 + 1) = 4
如果是二值化图片(只有0和255两种值),两者结果是一样的(用numpy的方式更简便一些)。
实验图片:


add()后效果

相减、相乘、相除:
图像融合、混合addWeighted()
图像混合 cv2.addWeighted() 也是一种图片相加的操作,只不过两幅图片的权重不一样,γ相当于一个修正值:

img1 = cv2.imread('lena_small.jpg')
img2 = cv2.imread('opencv-logo-white.png')
res = cv2.addWeighted(img1, 0.6, img2, 0.4, 0)
效果:

α和β都等于1时,就相当于图片相加。
按位操作包括按位与 / 或 / 非 / 异或操作,有什么用途呢?比如说我们要实现下图的效果:

如果将两幅图片直接相加会改变图片的颜色,如果用图像混合,则会改变图片的透明度,所以我们需要 用按位操作。 首先来了解一下 掩膜(mask) 的概念:掩膜是用一副二值化图片对另外一幅图片进行局 部的遮挡,看下图就一目了然了:

所以我们的思路就是把原图中要放logo的区域抠出来,再把logo放进去就行了:
img1 = cv2.imread('lena.jpg')
img2 = cv2.imread('opencv-logo-white.png')
# 把logo放在左上角,所以我们只关心这一块区域
rows, cols = img2.shape[:2]
roi = img1[:rows, :cols]
# 创建掩膜
img2gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray, 10, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)
# 保留除logo外的背景
img1_bg = cv2.bitwise_and(roi, roi, mask=mask_inv)
dst = cv2.add(img1_bg, img2)# 进行融合
img1[:rows, :cols] = dst # 融合后放在原图上
掩膜的概念在图像混合/叠加的场景下使用较多。
上边我们使用了
除了按位与、非运算还有:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
Matplotlib是Python程序员可用的事实上的绘图库,虽然它比交互式绘图库在图形上更简单,但它仍然可以一个强大的工具,下面这篇文章主要给大家介绍了关于Python matplotlib绘图时使用鼠标滚轮放大/缩小图像的相关资料,需要的朋友可以参考下
%r用rper()方法处理对象%s用str()方法处理对象函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式(如果没有
本文给大家分两部分介绍,第一部分通过图文的形式给大家介绍了全景图切割的代码,第二部分给大家介绍了盒图展示效果的实现代码,对MATLAB 全景图切割相关知识感兴趣的朋友,跟随小编一起看看吧
如果想要充分利用,在python中大部分情况需要使用多进程,那么这个包就叫做multiprocessing。借助它,可以轻松完成从单进程到并发执行的转换。multiprocessing支持子进程、通信和共享数据、执行不同形式的同步,提供了Process、Queue、Pipe、Lock等组件。那么本节要介绍的内容有:ProcessLockSemaphoreQueuePipePoo
本文主要介绍了Django实现视频播放的具体示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下<BR>
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008