详解python opencv图像混合算术运算

 更新时间:2021年09月03日 11:38:19   作者:RayChiu757374816  
这篇文章主要介绍了python opencv图像混合算术运算的相关知识,本文通过实例图文相结合给大家介绍的非常详细,需要的朋友可以参考下

图片相加 cv2.add()       

 要叠加两张图片,可以用 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()后效果

 相减、相乘、相除:

  •  subtract(img1,img2)  # 相减,可以用于目标检测m
  • ultiply(img1,img2) # 相乘
  • divide(img1,img2) # 相除

 图像融合、混合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 # 融合后放在原图上

 掩膜的概念在图像混合/叠加的场景下使用较多。

上边我们使用了

  • 按位与 bitwise_and(roi, roi, mask=mask_inv)
  • 非运算 bitwise_not(mask)

除了按位与、非运算还有:

  • 或运算 bitwise_or(img1,img2)
  • 异或运算 bitwise_xor(img1,img2) 

到此这篇关于详解python opencv图像混合算术运算的文章就介绍到这了,更多相关python opencv图像算术运算内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python基础之logging模块知识总结

    Python基础之logging模块知识总结

    用Python写代码的时候,在想看的地方写个print xx 就能在控制台上显示打印信息,这样子就能知道它是什么了,但是当我需要看大量的地方或者在一个文件中查看的时候,这时候print就不大方便了,所以Python引入了logging模块来记录我想要的信息,需要的朋友可以参考下
    2021-05-05
  • Python实现的爬虫功能代码

    Python实现的爬虫功能代码

    这篇文章主要介绍了Python实现的爬虫功能,涉及Python使用urllib2、BeautifulSoup模块实现网页源码的获取、解析等相关操作技巧,需要的朋友可以参考下
    2017-06-06
  • Python中的id()函数指的什么

    Python中的id()函数指的什么

    id() 函数用于获取对象的内存地址。很多朋友不清楚python中的id函数到底是什么?接下来小编给大家分享本文帮助大家学习
    2017-10-10
  • 浅谈一下python线程池简单应用

    浅谈一下python线程池简单应用

    这篇文章主要介绍了浅谈一下python线程池简单应用,线程池在系统启动时即创建大量空闲的线程,程序只要将一个函数提交给线程池,线程池就会启动一个空闲的线程来执行它,需要的朋友可以参考下
    2023-04-04
  • python删除列表内容

    python删除列表内容

    这里给大家通过2个例子,分析了下如何使用python删除列表内容,也给出了思路,分别通过pop和remove方法来实现,有相关需求的小伙伴可以参考下。
    2015-08-08
  • 详解Python3 对象组合zip()和回退方式*zip

    详解Python3 对象组合zip()和回退方式*zip

    这篇文章主要介绍了Python3 对象组合zip()和回退方式*zip详解,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-05-05
  • Python构造函数与析构函数超详细分析

    Python构造函数与析构函数超详细分析

    在python之中定义一个类的时候会在类中创建一个名为__init__的函数,这个函数就叫做构造函数。它的作用就是在实例化类的时候去自动的定义一些属性和方法的值,而析构函数恰恰是一个和它相反的函数,这篇文章主要介绍了Python构造函数与析构函数
    2022-11-11
  • pycharm如何关闭pytest

    pycharm如何关闭pytest

    这篇文章主要介绍了pycharm如何关闭pytest问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • pyautogui自动化控制鼠标和键盘操作的步骤

    pyautogui自动化控制鼠标和键盘操作的步骤

    这篇文章主要介绍了pyautogui自动化控制鼠标和键盘操作的步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Python如何获取系统iops示例代码

    Python如何获取系统iops示例代码

    这篇文章主要是介绍用python通过系统数据来获取磁盘的iops,便于监控使用情况,对于大家在安全监控方面很实用,有需要的朋友们可以参考借鉴。
    2016-09-09

最新评论