OpenCV-Python图像位与运算bitwise_and函数详解
☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython ░
一、概述
图像的与运算主要用于获取某个图像中感兴趣的部分,是针对两个图像矩阵数组或一个数组与标量的按位与,其结果计算方法如下:
- 当src1和src2代表的两个图像矩阵数组的大小相同时,结果矩阵元素的值为:
dst(I)=src1(I)∧src2(I) if mask(I)≠0
- 当src1为矩阵数组而src2为标量时,结果矩阵元素的值为:
dst(I)=src1(I)∧src2 if mask(I)≠0
具体标量经老猿测试发现可以是一个常数或一个代表BGRA的四元组,是否还有其他形式不确认,但二元组和三元组肯定不行,如果是常数,OpenCV会转成一个代表BGRA的4元组参与运算,该四元组的第一个元素就是该常数,其他元素为0。 - src1为标量而src2为矩阵数组时,结果矩阵元素的值为:
dst(I)=src1∧src2(I) if mask(I)≠0
标量取值与上面场景相同。
关于上述运算过程,补充说明如下:
- 在浮点数组的情况下,位运算与机器环境相关的位表示方法(通常与IEEE754兼容)相关;
- 在多通道矩阵数组情况下,每个通道都是独立处理的;
- 在上述第二和第三种情况下,标量如果为常数或单一数值变量,首先转换为四元组。
二、语法说明
函数原型:
bitwise_and(src1, src2, dst=None, mask=None)
参数说明:
- src1、src2:为输入图像或标量,标量可以为单个数值或一个四元组
- dst:可选输出变量,如果需要使用非None则要先定义,且其大小与输入变量相同
- mask:图像掩膜,可选参数,为8位单通道的灰度图像,用于指定要更改的输出图像数组的元素,即输出图像像素只有mask对应位置元素不为0的部分才输出,否则该位置像素的所有通道分量都设置为0
返回值为结果图像矩阵,如果dst传入了实参,则返回值与dst对应 实参相同。
三、案例:
下面的案例将一副图像加载到内存,然后分别与一个数值和一个构造的mask矩阵相乘。加载的原图imgs.jpg大小为720*600的三通道彩色图像。图像如下:
案例代码如下:
import numpy as np
import cv2
def main():imgSrc = cv2.imread(r'F:\pic\imgs.JPG')# 下面2行代码构造输出OpenCV图标的掩膜,255确保所有位都是1imgMask = np.zeros(imgSrc.shape,dtype=np.uint8)imgMask[20:190,580:715] = 255 resultImg1 = cv2.bitwise_and(imgSrc, imgMask)resultImg2 = cv2.bitwise_and(imgSrc, 255)resultImg3 = cv2.bitwise_and(imgSrc, (255,255,255,255))cv2.imshow('resultImg1', resultImg1)cv2.imshow('resultImg2', resultImg2)cv2.imshow('resultImg3', resultImg3)cv2.waitKey(0)main()
输出三幅图像分别如下:
可以看到数值255与图像数组与时只保留了B通道的像素值,图像全部蓝化。
四、小结
本文详细介绍了OpenCV-Python图像位与运算bitwise_and函数的语法及计算方法,并举例说明了图像和标量的按位与、构造的掩膜图像和图像的按位与。可以看到bitwise_and可以控制选择感兴趣的通道(调整四元组的元素值)或区域进行输出。同时bitwise_and可以用于对图像上某些区域作屏蔽,使其不参加处理,也可以进行图像结构特征提取,用相似性变量或图像匹配方法检测和提取图像中相似的结构特征。
如果觉得本文可以给您带来帮助,请大家帮忙点个赞、加个收藏,谢谢!
更多OpenCV-Python的介绍请参考专栏《OpenCV-Python图形图像处理》相关文章。
关于老猿的付费专栏
老猿的付费专栏《使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,付费专栏《moviepy音视频开发专栏》详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,两个专栏都适合有一定Python基础但无相关知识的小白读者学习。
付费专栏文章目录:《moviepy音视频开发专栏文章目录》、《使用PyQt开发图形界面Python应用专栏目录》。
对于缺乏Python基础的同仁,可以通过老猿的免费专栏《专栏:Python基础教程目录》从零开始学习Python。
如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。
跟老猿学Python、学OpenCV!
☞ ░ 前往老猿Python博文目录 ░
OpenCV-Python图像位与运算bitwise_and函数详解相关推荐
- [转载] OpenCV-Python图像位与运算bitwise_and函数详解
参考链接: Python中的numpy.bitwise_and ☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython ░ 一.概述 图像的与运算主要 ...
- python平方数迭代器_对python中的高效迭代器函数详解
python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...
- python中plt定义,对Python中plt的画图函数详解
1.plt.legend plt.legend(loc=0)#显示图例的位置,自适应方式 说明: 'best' : 0, (only implemented for axes legends)(自适应 ...
- python getattr_Python中的getattr()函数详解:
标签:Python中的getattr()函数详解: getattr(object, name[, default]) -> value Get a named attribute from an ...
- python open写入_Python3 open() 函数详解 读取文件写入文件追加文件二进制文件
Python3 open() 函数详解 读取文件写入文件追加文件二进制文件 open()函数的主要作用是打开文件并返回相应文件对象,使用文件对象可以对当前文件进行读取.写入.追加等操作,默认情况下&q ...
- python bytearray转为byte_Python3 bytearray() 函数详解 将参数转为可变的字节数组
Python3 bytearray() 函数详解 将参数转为可变的字节数组 bytearray()函数的主要用途是将参数转换为一个新的字节数组,它是一个可变的整数序列,它的取值范围是0 <= x ...
- python中文件读写--open函数详解
python中open函数详解 在python中文件的读取分为三步走: 读:打开文件 -> 读文件 -> 关闭文件 (有点像把大象放进冰箱需要几步?的问题) 1.open函数 open函数 ...
- Python操作文件之open函数详解
Python的open函数详解 open(file, mode='rt', encoding=None) -> BaseIO mode参数详解: 字符 含意 'r' 读取(默认) 'w' 写入, ...
- python bytes 改值_Python3 bytes() 函数详解 将参数转为不可变的字节数组
Python3 bytes() 函数详解 将参数转为不可变的字节数组 bytes()函数的主要用途是将参数转换为一个新的字节数组,它是一个不可变的整数序列,它的取值范围是0 <= x < ...
最新文章
- Python可视化神器Yellowbrick使用
- 网易哲学气质H5看似眼熟,为什么大家还是忍不住转发?
- POJ2318 TOYS / POJ2398Toy Storage判断点与直线位置关系 【计算几何】
- java 强制安卓竖屏,Android4.0强制横屏竖屏
- .NET下使用socket.io随笔记录
- eai app_EAI的Spring集成教程
- 利用python提取网站曲线图数据
- centos sudo不能运行_Linux命令su、sudo、sudo su、sudo -i使用和区别
- MYSQL 4种插入数据的方式比较
- 20145322何志威 《Java程序设计》课程总结
- 变革时代 看 花行企业如何打破传统订货弊端
- 【vpn异地组网专题】linux(centos7)安装 PPTP服务器
- minio 分片上传
- 排列组合_均匀分组和部分均匀分组的计算与示例/二项式定理二项式系数/求和中的对称性/莱布尼兹公式与推广的求导法则
- 选中DataGridView行,将数据返填到TextBox控件
- 《一名网络工程师的自我修养》--子网划分
- 使用initial-letter实现首字下沉效果,感兴趣的同学欢迎猛击:
- AE C# 图片和文本标注(通过查询)
- Elastic Stack-01-Filebeat-8.3
- 基于Windows8与Visual Studio11开发第一个USB驱动应用程序
热门文章
- seata分布式事务解决方案
- vm眼影真的好用吗_便宜的眼影盘有什么坏处?
- Android_学习系列(33)--App应用之提交到各大市场渠道
- Hive中的explode使用全解(附图片详解)
- 篮球术语English
- C语言/C++常见习题问答集锦(六十五) 之彩票幸运星
- 新媒体运营教程:直播流量获取秘籍,建议收藏!
- linux修改密码过期时间
- 湖北工业大学数据结构用头文件、数据结构与算法王立柱2013
- 海鸥表表带太长了怎么拆_海鸥手表表带质量遭疑 店家:与个人佩戴方式有关...