位运算bitwise_and函数

这篇具有很好参考价值的文章主要介绍了位运算bitwise_and函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

今天在学习opencv时,把OpenCV 的标志放到另一幅图像上。这时要用到cv2.bitwise_and函数,加下来从原理和效果讲一下这个函数。

目标:将下面这个logo加到蚂蚁图像的左上角并且背景无遮挡(logo图片白的部分不遮挡蚂蚁图片蓝的地方)。

位运算bitwise_and函数

位运算bitwise_and函数

效果:

位运算bitwise_and函数

下面直接上代码,根据代码讲解原理:

import cv2
img1 = cv2.imread(r'D:\Pycharm\learn_opencv\pic\ants_image\0013035.jpg')
img2 = cv2.imread('D:\Pycharm\learn_opencv\pic\logo.jfif')

rows,cols,channels = img2.shape
roi = img1[0:rows, 0:cols]

img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray, 200, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)

img1_bg = cv2.bitwise_and(roi,roi,mask = mask)
img2_fg = cv2.bitwise_and(img2,img2,mask = mask_inv)
dst = cv2.add(img1_bg,img2_fg)
img1[0:rows, 0:cols ] = dst
cv2.imshow('sasa',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()

 首先下面这两行的代码作用是将我们的蚂蚁图像中的对应logo图像的区域找出来记为roi

rows,cols,channels = img2.shape
roi = img1[0:rows, 0:cols]

我们将这个roi图像显示出来,与我们预想的一致,正是蚂蚁图像的左上角对应logo图像的区域:

位运算bitwise_and函数

 下面三行代码是生成一个mask掩码矩阵和mask_inv逆掩码矩阵方便我们后面cv2.bitwise_and函数的使用,我们稍微讲一下参数和原理,后面再看效果。

img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray, 200, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)

第一行是将我们的logo图像变成灰度图像,第二行cv2.threshold函数的参数:第一个参数为原图像,第二个参数为进行分类的阈值,第三个参数为高于(低于)阈值时赋予的新值,第四个方法选择参数,常用的有:
• cv2.THRESH_BINARY(黑白二值)
• cv2.THRESH_BINARY_INV(黑白二值反转)
• cv2.THRESH_TRUNC (得到的图像为多像素值)
• cv2.THRESH_TOZERO
• cv2.THRESH_TOZERO_INV

返回值为:第一个retVal(得到的阈值值),第二个就是阈值化后的掩码图像

根据我们选择的模式为cv2.THRESH_BINARY,以及第二三个参数为200、255,表示:高于200的像素设置为255,否则像素值置零。其他模式见文章:(13条消息) 图像阈值处理cv2.threshold()函数(python)_肥宅_Sean的博客-CSDN博客_cv2threshold

于是我们的mask图像便是对于img2gray图像的高于200的像素值置255(白),否则置0(黑),我们来验证一下: 

img2gray图像:

位运算bitwise_and函数

mask掩码矩阵图像:

 位运算bitwise_and函数

可以看见img2gray中黑的和灰的像素值较低被置为黑色,背景白色仍置为白色。

得到mask掩码矩阵图像后我们接着往下看:

img1_bg = cv2.bitwise_and(roi,roi,mask = mask)
img2_fg = cv2.bitwise_and(img2,img2,mask = mask_inv)

cv2.bitwise_and函数的作用取与运算,第一个参数为输入图像,第二个参数为输出图像,第三个参数mask:图像掩膜,可选参数,为8位单通道的灰度图像,用于指定要更改的输出图像数组的元素,即输出图像像素只有mask对应位置元素不为0的部分才输出,否则该位置像素的所有通道分量都设置为0

roi图像和mask图像上面已给出,下面我们给出img1_bg的图像:

位运算bitwise_and函数

与声明的一致,同理img2_fg图像只是将参数mask换成了其反矩阵,并且作用对象变成了我们的logo图像。我们看看效果:

img2_fn图像:

位运算bitwise_and函数

 也即在原来mask矩阵图像为白的时候输出原图logo图像,反之置黑。

最后,我们将上面两张图加起来就达到了我们想要的左上角部分,再把原图蚂蚁图像的左上角替换成我们加起来后的左上角部分即得到结果:文章来源地址https://www.toymoban.com/news/detail-444949.html

dst = cv2.add(img1_bg,img2_fg)
img1[0:rows, 0:cols ] = dst

到了这里,关于位运算bitwise_and函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • TypeError: ufunc ‘bitwise_and‘ not supported for the input types, and the inputs could not be safely

    这个错误是因为您使用了逻辑运算符来执行按位与(bitwise and)运算,而它不适用于浮点数类型的输入数据。 要比较两个浮点数是否在一个范围内,您可以使用逻辑运算符and,或者使用numpy库中的logical_and函数。具体地,您可以按照以下方式更改代码: 1.使用逻辑运算符and来替代

    2024年02月14日
    浏览(53)
  • OPENCV 闭运算实验示例代码morphologyEx()函数

     闭运算就是先膨胀,后腐蚀,膨胀或者腐蚀的对象都是针对非零像素,也就是图片当中不是全黑的那部分像素-----或者说灰度值等于0的那些个像素。膨胀导致非零像素膨胀,黑像素就会缩小, 腐蚀导致非零像素减少,黑色像素就会增多。也许有人会搞不清这一点 闭运算是先

    2024年02月07日
    浏览(51)
  • 图像的形态学开操作(开运算)和闭操作(闭运算)的概念和作用,并用OpenCV的函数morphologyEx()实现对图像的开闭操作

    大家看这篇博文前可以先看一看下面这篇博文,下面这篇博文是这篇博文的基础: 详解图像形态学操作之图形的腐蚀和膨胀的概念和运算过程,并利用OpenCV的函数erode()和函数dilate()对图像进行腐蚀和膨胀操作 图像形态学腐蚀可以将细小的噪声区域去除,但是会将图像主要区域

    2024年02月06日
    浏览(59)
  • 【Python】【Opencv】形态学操作cv2.morphologyEx()函数详解和示例,实现腐蚀、膨胀、闭和开等运算

    常用的形态学操作如腐蚀、膨胀、开运算、闭运算等,可以帮助我们解决一下图像不连接或消除图像中某些不想要的连接,对于图像处理使用方便,效果明显。本文通过示例对这些功能和效果进行演示,以帮助大家理解和使用。 cv2.morphologyEx 是 OpenCV 中的一个函数,用于执行

    2024年02月22日
    浏览(66)
  • 【opencv学习】鼠标回调函数、鼠标控制画矩形

    1.回调函数可以简单理解为一边做一件事的同时做另一件事,优化之前的实现完一个函数后才实现另一个的问题。 鼠标回调函数就是一边鼠标操作画图,一边显示画出的图像。 2.实现一个矩形rec只需要知道一个左上角的坐标和宽高即可实例化对象。

    2024年02月14日
    浏览(50)
  • 【计算机视觉—python 】 图像处理入门教程 —— 图像属性、像素编辑、创建与复制、裁剪与拼接【 openCV 学习笔记 005 to 010 and 255】

    OpenCV中读取图像文件后的数据结构符合Numpy的ndarray多维数组结构,因此 ndarray 数组的属性和操作方法可用于图像处理的一些操作。数据结构如下图所示: img.ndim:查看代表图像的维度。彩色图像的维数为3,灰度图像的维度为2。 img.shape:查看图像的形状,代表矩阵的行数(高

    2024年01月19日
    浏览(66)
  • 学习笔记:C++环境下OpenCV的findContours函数的参数详解及优化

    这个是Visual Studio2019版本在OpenCV环境配置好后所显示的 6个参数 ,也即为全部参数 但是, 常用参数仅有四个 (参见程序里的第二行注释)  参数1    image  : 单通道图像矩阵。待提取轮廓的图像,可以是灰度图, 常用的是二值图 (C++中可选择使用Canny,拉普拉斯等边缘检测算法

    2024年02月07日
    浏览(39)
  • Qt-OpenCV学习笔记--基本函数操作--cv::convertTo(图像类型转换)

    不是所有格式的Mat型数据都能被使用。 目前OpenCV主要只支持单通道和3通道的图像,并且此时要求其深度为8bit和16bit无符号(即CV_16U),所以其他一些数据类型是不支持的,比如说float型等。 如果Mat类型数据的深度和通道数不满足上面的要求,则需要使用convertTo()函数和cvtColor(

    2024年02月04日
    浏览(56)
  • OpenCV 笔记(4):图像的算术运算、逻辑运算

    图像的本质是一个矩阵,所以可以对它进行一些常见的算术运算,例如加、减、乘、除、平方根、对数、绝对值等等。除此之外,还可以对图像进行逻辑运算和几何变换。 我们先从简单的图像加、减、逻辑运算开始介绍。后续会有专门的内容介绍图像的几何变换等。 图像的

    2024年02月06日
    浏览(46)
  • OpenCV 入门教程:开运算和闭运算

    开运算和闭运算是形态学图像处理中常用的操作,用于改变图像的形状和结构。它们是基于膨胀和腐蚀操作的组合,可以用于图像去噪、边缘保留、图像分割等多个领域。本文将以开运算和闭运算为中心,为你介绍使用 OpenCV 进行形态学操作的基本步骤和实例。 😃😄 ❤️

    2024年02月13日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包