opencv -11 图像运算之按位逻辑运算(图像融合&图像修复和去除)

这篇具有很好参考价值的文章主要介绍了opencv -11 图像运算之按位逻辑运算(图像融合&图像修复和去除)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

按位逻辑运算是一种对图像进行像素级别的逻辑操作的方法,使用OpenCV的按位逻辑运算函数可以对图像进行位与(AND)、位或(OR)、位非(NOT)和位异或(XOR)等操作。

通俗点就是将像素点的十进制值转成二进制 来运算
opencv -11 图像运算之按位逻辑运算(图像融合&图像修复和去除),opencv,opencv,人工智能,计算机视觉

以下是一些常见的按位逻辑运算的应用场景:

图像融合:按位逻辑运算可以用于图像融合,通过对两个图像进行位与、位或或位异或操作,可以实现图像的混合、叠加、过渡和融合效果。这在图像处理、特效制作和图像合成中常用于创建创意效果和特殊效果。

图像分割和掩膜:按位逻辑运算可以用于图像分割和掩膜操作。通过使用掩膜图像(二进制图像),可以通过位与运算提取图像中感兴趣的区域,或者通过位或运算将不同的图像部分进行组合。这在图像分析、目标提取和图像编辑中常用于区域选择和图像掩膜操作。

图像修复和去除:按位逻辑运算可以用于图像修复和去除。通过将损坏或缺失的区域与参考图像进行位与或位或运算,可以实现对损坏区域的修复或去除。这在图像修复、恢复和去噪中常用于修复缺失区域或去除不需要的内容。

图像处理和特征提取:按位逻辑运算可以用于图像处理和特征提取中的特定操作。例如,通过使用位异或运算,可以检测出两个图像之间的差异和变化。这在图像比较、图像匹配和特征提取等领域中常用于分析和检测图像之间的差异。

图像二值化和阈值操作:按位逻辑运算可以用于图像二值化和阈值操作。通过与二值掩膜图像进行位与运算,可以将图像中的像素根据阈值进行分割和二值化。这在图像分割、图像阈值化和图像二值化等领域中常用于分割图像和提取感兴趣的目标。

这些只是按位逻辑运算的一些常见应用场景,实际上,按位逻辑运算在图像处理和计算机视觉中具有广泛的应用。通过灵活运用按位逻辑运算,可以实现各种图像处理和分析的需求。

按位与运算

在位与运算中,当参与与运算的两个逻辑值都是真时,结果才为真。其逻辑关系可以类比
图 3-4 所示的串联电路,只有当两个开关都闭合时,灯才会亮。

opencv -11 图像运算之按位逻辑运算(图像融合&图像修复和去除),opencv,opencv,人工智能,计算机视觉
3-2 对与运算算子的不同情况进行了说明,表中使用“and”表示与运算。

opencv -11 图像运算之按位逻辑运算(图像融合&图像修复和去除),opencv,opencv,人工智能,计算机视觉
在 OpenCV 中,可以使用 cv2.bitwise_and()函数来实现按位与运算,其语法格式为:
dst = cv2.bitwise_and( src1, src2[, mask]] )
式中:
 dst 表示与输入值具有同样大小的 array 输出值。
 src1 表示第一个 array 或 scalar 类型的输入值。
 src2 表示第二个 array 或 scalar 类型的输入值。
 mask 表示可选操作掩码,8 位单通道 array。

按位与操作有如下特点:
 将任何数值 N 与数值 0 进行按位与操作,都会得到数值 0。
 将任何数值 N(这里仅考虑 8 位值)与数值 255(8 位二进制数是 1111 1111)进行按位与操作,都会得到数值 N 本身。
可以通过表 3-4 观察数值 N(表中是 219)与特殊值 0 和 255 进行按位与运算的结果。

opencv -11 图像运算之按位逻辑运算(图像融合&图像修复和去除),opencv,opencv,人工智能,计算机视觉
根据上述特点,可以构造一幅掩模(具体后面会讲到什么是掩膜)图像 M,掩模图像 M 中只有两种值:一种是数值 0,另外
一种是数值 255。将该掩模图像 M 与一幅灰度图像 G 进行按位与操作,在得到的结果图像 R 中:
 与掩模图像 M 中的数值 255 对应位置上的值,来源于灰度图像 G。
 与掩模图像 M 中的数值 0 对应位置上的值为零(黑色)。

下面使用数组演示与掩模图像的按位与运算

import cv2
import numpy as np
#定义一个5行5列的随机数组,数据类型为 uint8
a=np.random.randint(0,255,(5,5),dtype=np.uint8)
#定义一个5行5列的全零数组,数据类型为 uint8
b=np.zeros((5,5),dtype=np.uint8)
#将数组 b 的第 1 行到第 3 行、第 1 列到第 3 列的元素设置为 255
b[0:3,0:3]=255
#将数组 b 的第 5 行、第 5 列的元素设置为 255
b[4,4]=255
#位与运算
c=cv2.bitwise_and(a,b)
print("a=\n",a)
print("b=\n",b)
print("c=\n",c)

运行结果:

a=
 [[218  43  29 157 202]
 [ 22 109 168  88 136]
 [208 114 177  23   8]
 [ 17 245 173  96 137]
 [136 127 200 179  25]]
b=
 [[255 255 255   0   0]
 [255 255 255   0   0]
 [255 255 255   0   0]
 [  0   0   0   0   0]
 [  0   0   0   0 255]]
c=
 [[218  43  29   0   0]
 [ 22 109 168   0   0]
 [208 114 177   0   0]
 [  0   0   0   0   0]
 [  0   0   0   0  25]]

从程序结果可以看出,数组 c 来源于数组 a 与数组 b 的按位与操作。运算结果显示,对于数组c 内的值,与数组 b 中数值 255 对应位置上的值来源于数组 a;与数组 b 中数值 0 对应位置上的值为 0,验证了上面的

 将任何数值 N 与数值 0 进行按位与操作,都会得到数值 0。
 将任何数值 N(这里仅考虑 8 位值)与数值 255(8位二进制数是 1111 1111)进行按位与操作,都会得到数值 N 本身

下面我们用图片来构造一个掩模图像,使用按位与运算保留图像中被掩模指定的部分

import cv2
import numpy as np
a=cv2.imread("lena.png",0)
#将 a 的像素值全部设置为 0,及黑色
b=np.zeros(a.shape,dtype=np.uint8)
#将 b 的这个roi 区域 的像素值全部设置为 255,及白色
b[100:400,200:400]=255
#将 b 的这个roi 区域 的像素值全部设置为 255,及白色
b[100:500,100:200]=255
#将 a 和 b 进行按位与运算,得到图像 c
c=cv2.bitwise_and(a,b)

cv2.imshow("a",a)
cv2.imshow("b",b)
cv2.imshow("c",c)
cv2.waitKey()
cv2.destroyAllWindows()

运行效果:

opencv -11 图像运算之按位逻辑运算(图像融合&图像修复和去除),opencv,opencv,人工智能,计算机视觉

运行上述程序,输出结果 左图是原始图像 lena,中间的图是掩模图像,右图是按位与结果图像,可以看到,被掩模指定的头部图像被保留在了运算结果中。

除了需要对灰度图像进行掩模处理,还经常需要针对 BGR 模式的彩色图像使用掩模提取指定部分。由于按位与操作要求参与运算的数据有相同的通道,所以无法直接将彩色图像与单
通道的掩模图像进行按位与操作。一般情况下,可以通过将掩模图像转换为 BGR 模式的彩色
图像,让彩色图像与掩模图像进行按位与操作,实现掩模运算,知需要将上面的代码中

a=cv2.imread("lena.png",0) 中的0 改成1 

整体代码如下:


import cv2
import numpy as np
a=cv2.imread("lena.png",1)
b=np.zeros(a.shape,dtype=np.uint8)
b[100:400,200:400]=255
b[100:500,100:200]=255
c=cv2.bitwise_and(a,b)
print("a.shape=",a.shape)
print("b.shape=",b.shape)
print("c.shape=",c.shape)
cv2.imshow("a",a)
cv2.imshow("b",b)
cv2.imshow("c",c)
cv2.waitKey()
cv2.destroyAllWindows()

运行效果:

opencv -11 图像运算之按位逻辑运算(图像融合&图像修复和去除),opencv,opencv,人工智能,计算机视觉文章来源地址https://www.toymoban.com/news/detail-583048.html

到了这里,关于opencv -11 图像运算之按位逻辑运算(图像融合&图像修复和去除)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • OpenCV 笔记(4):图像的算术运算、逻辑运算

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

    2024年02月06日
    浏览(48)
  • Verilog 逻辑与(&&)、按位与(&)、逻辑或(||)、按位或(|)、等于(==)、全等(===)的区别

    逻辑与是一个双目运算符,当符号两边为1时输出1,符号两边为0时输出0。 真值表: 0 1 x z 0 0 0 0 0 1 0 1 x x x 0 x x x z 0 x x x 两个4bit的数字相与;A=4\\\'b0x1z;B=4\\\'b01xx;C=4\\\'b00xz;求AB;AC;是什么值?当逻辑与操作符两边的数字均含有“1”,则输出1。 那么怎么判断A、B、C为是否含有

    2024年01月19日
    浏览(39)
  • 图像的代数运算与逻辑运算——Matlab实现

    加法运算通常用于平均值降噪等多种场合。图像相加一般用于同一场景的多幅图像求平均,以便有效降低加性噪声。当图片被随机噪声源干扰,则可以通过对多幅静止图像求平均值来达到消除或者降低噪声的目的。 在求平均值的过程中,图像的静止部分不会改变,而由于图像

    2024年02月05日
    浏览(33)
  • 位运算:按位与、按位或、按位异或、按位左移、按位右移

    目录 一、基础知识补充     (1)位运算     (2)二进制的详细操作 二、位运算     (1)按位与()     (2)按位或(|)     (3)按位异或(^)       (4)按位左移()     (5)按位右移() 三、位运算例题     题目描述:     题解: 四、共勉     位运算符要比一般

    2024年02月03日
    浏览(49)
  • Opencv | 基于像素的基础操作 & 逻辑运算

    感谢阅读🌼 如果喜欢这篇文章,记得点赞👍和转发🔄哦! 有任何想法或问题,欢迎留言交流💬,我们下次见! 本文相关代码存放位置     【 Opencv基于像素值的计算 】     【 Opencv 基于像素值的逻辑运算 】 祝愉快🌟!

    2024年04月12日
    浏览(33)
  • 位运算(按位与、按位或、异或、取反)以及原码、反码、补码

    目录 位运算 按位与运算符 [ ] 按位或运算符 [ | ] 异或运算符 [ ^ ] 取反运算符 [ ~ ] 移位操作 一些面试常考的位操作运算 获取二进制中最右边的1 计算机原码、反码、补码 机器数 “三码”之间的转换 计算机中为啥要用补码呢? 真数 原码 反码 补码 有了原码为什么要使用反码

    2024年02月02日
    浏览(50)
  • OpenCV图像拼接和图像融合

    其它参考: https://zhuanlan.zhihu.com/p/362371939 https://blog.csdn.net/u013289254/article/details/103111601 主流的图像融合算法主要有以下几种: 1)直接进行图像拼接,会导致图片之间有很明显的界线 2)加权平均法,界线的两侧各取一定的比例来融合缝隙,速度快,但不自然 3)羽化算法,即

    2024年02月05日
    浏览(38)
  • opencv实现抠图,图像拼接,图像融合

    在OpenCV中,你可以使用图像拼接、抠图和将图像的一部分放在另一张图片的指定位置。以下是示例代码,演示如何执行这些操作: 图像拼接 要将两张图像拼接在一起,你可以使用  cv::hconcat (水平拼接)和  cv::vconcat (垂直拼接)函数。下面是一个示例代码,演示如何水平

    2024年02月05日
    浏览(38)
  • OpenCV进阶 — 图像拼接和图像融合技术

    图像拼接在实际的应用场景很广,比如无人机航拍,遥感图像等等,图像拼接是进一步做图像理解基础步骤,拼接效果的好坏直接影响接下来的工作,所以一个好的图像拼接算法非常重要。 再举一个身边的例子吧,你用你的手机对某一场景拍照,但是你没有办法一次将所有你

    2024年02月03日
    浏览(37)
  • opencv(三)边界填充、图像融合、图像阈值处理

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 边界填充就是将图片按一定的方法将图片的四周向外填充并将图片放大 因为opencv中的颜色通道不是RGB而是BGR,所以我们要用到之前讲到的分割将颜色通道重新整合成RGB后再用matplotlib库将其画出 BORDER_R

    2024年02月21日
    浏览(58)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包