OpenCV学习(六)——图像算术运算(加法、融合与按位运算)

news2024/11/24 19:11:13

图像算术运算

    • 6. 图像算术运算
      • 6.1 图像加法
      • 6.2 图像融合
      • 6.3 按位运算

6. 图像算术运算

6.1 图像加法

  • OpenCV加法是饱和运算
  • Numpy加法是模运算
import cv2
import numpy as np

x = np.uint8([250])
y = np.uint8([10])

# OpenCV加法
print(cv2.add(x, y))  # 250+10 = 260 => 255

# Numpy加法
print(x+y)   # 250+10 = 260 % 256 = 4

请添加图片描述

6.2 图像融合

对图像赋予不同的权重,以使其具有融合或透明的感觉。

图像融合:dst = α*img1 + β*img2 + γ

cv2.addWeighted(src1, alpha, src2, beta, gamma, dst=None, dtype=None)

  • src1:图像1
  • alpha:图像1的权重
  • src2:图像2
  • beta:图像2的权重
import cv2
from matplotlib import pyplot as plt

# 读取图像
img1 = cv2.imread('lena.jpg')  # (512, 512, 3)
img2 = cv2.imread('opencv.jpg')  # (536, 536, 3)

print(img1.shape)
print(img2.shape)

# 改变尺寸
img2 = cv2.resize(img2, (512, 512))

# 图像融合:dst = α*img1 + β*img2 + γ
# α:img1的权重,β:img2的权重
dst = cv2.addWeighted(img1, 0.8, img2, 0.2, 0)

# 显示多张图像
plt.subplot(131), plt.title("1. img1"), plt.axis('off')
plt.imshow(cv2.cvtColor(img1, cv2.COLOR_BGR2RGB))  # 显示 img1(RGB)
plt.subplot(132), plt.title("2. img2"), plt.axis('off')
plt.imshow(cv2.cvtColor(img2, cv2.COLOR_BGR2RGB))  # 显示 img2(RGB)
plt.subplot(133), plt.title("dst. img3"), plt.axis('off')
plt.imshow(cv2.cvtColor(dst, cv2.COLOR_BGR2RGB))  # 显示 img2(RGB)
plt.show()

请添加图片描述

6.3 按位运算

这包括按位 ANDORNOTXOR 操作。

cv2.bitwise_and(src1, src2, dst=None, mask=None)计算两个数组或数组的逐元素按位连进行与运算

  • scr1,scr2:输入图像,可为灰度图或彩色图,src1 和 src2 大小需一样。
  • dst:输出图像,尺寸和类型与 src 保持一致。
  • mask:掩膜,只对 mask 设定的有效区域进行操作。

cv2.threshold(src, thresh, maxval, type, dst=None)图像阈值(见OpenCV学习(9))

  • src:源图像,应该为灰度图。
  • thresh:阈值,像素值小于阈值,则将其设置为0,否则将其设置为最大值。
  • maxval:分配给超过阈值的像素值的最大值。
  • type:提供了不同类型的阈值
    • cv.THRESH_BINARY
    • cv.THRESH_BINARY_INV
    • cv.THRESH_TRUNC
    • cv.THRESH_TOZERO
    • cv.THRESH_TOZERO_INV
  • dst:输出图像
import cv2
from matplotlib import pyplot as plt

# 读取图像
img1 = cv2.imread('lena.jpg')  # (512, 512, 3)
img2 = cv2.imread('opencv.jpg')  # (536, 536, 3)

# 提取OpenCV标志,将其缩小后放在img1的左上角
img2 = cv2.resize(img2, (200, 200))
rows, cols, channels = img2.shape
# 创建roi区域
roi = img1[0:rows, 0:cols]
# 现在创建logo的掩码,并同时创建其相反掩码
img2gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray, 200, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)

# 现在将ROI中logo的区域涂黑,即像素值为0
img1_bg = cv2.bitwise_and(roi, roi, mask=mask)
# 仅从logo图像中提取logo区域
img2_fg = cv2.bitwise_and(img2, img2, mask=mask_inv)
# 将logo放入ROI并修改主图像
dst = cv2.add(img1_bg, img2_fg)
img1[0:rows, 0:cols] = dst

# 显示多张图像
plt.subplot(231), plt.title("mask. img1"), plt.axis('off')
plt.imshow(cv2.cvtColor(mask, cv2.COLOR_GRAY2RGB))  # 显示 img1(RGB)
plt.subplot(232), plt.title("mask_inv. img2"), plt.axis('off')
plt.imshow(cv2.cvtColor(mask_inv, cv2.COLOR_GRAY2RGB))  # 显示 img2(RGB)
plt.subplot(233), plt.title("img1_bg. img3"), plt.axis('off')
plt.imshow(cv2.cvtColor(img1_bg, cv2.COLOR_BGR2RGB))  # 显示 img2(RGB)

plt.subplot(234), plt.title("img2_fg. img4"), plt.axis('off')
plt.imshow(cv2.cvtColor(img2_fg, cv2.COLOR_BGR2RGB))  # 显示 img2(RGB)
plt.subplot(235), plt.title("dst. img5"), plt.axis('off')
plt.imshow(cv2.cvtColor(dst, cv2.COLOR_BGR2RGB))  # 显示 img2(RGB)
plt.subplot(236), plt.title("img1. img6"), plt.axis('off')
plt.imshow(cv2.cvtColor(img1, cv2.COLOR_BGR2RGB))  # 显示 img2(RGB)
plt.show()
  1. 在img2中创建opencv的掩码与反掩码
  2. 在img1中设定roi区域
  3. 利用位的与运算将roi区域的logo涂黑(像素值为0,利用掩码)
  4. 提取img2中的opencv标志(利用反掩码)
  5. 将opencv放入roi并修改主图像(像素值相加)

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1144849.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Threejs开发的3D点位编辑器

简介 编辑器可以让用户在3D场景中添加、编辑和删除点位,并且支持上传参考模型、多点位类型的添加、上传、编辑、下载和删除、场景视图中点位的拖拽、场景配置等功能。 注:所有操作均在本地。 技术栈 three.js:一个用于创建3D图形的JavaScr…

AN动画基础——摄像头

【AN动画基础——摄像头】 摄像头功能基本动画景深效果 实战 本篇内容:了解摄像头 重点内容:摄像头应用 工 具:Adobe Animate 2022 摄像头功能 在动画制作中,摄像头用于模拟真实摄影过程的视角选择和镜头运动。 摄像头可以决定观…

机器学习-特征选择:如何使用互信息特征选择挑选出最佳特征?

一、引言 特征选择在机器学习中扮演着至关重要的角色,它可以帮助我们从大量的特征中挑选出对目标变量具有最大预测能力的特征。互信息特征选择是一种常用的特征选择方法,它通过计算特征与目标变量之间的互信息来评估特征的重要性。 互信息是信息论中的一…

scratch绘制彩虹灯柱 2023年9月中国电子学会图形化编程 少儿编程 scratch编程等级考试三级真题和答案解析

目录 scratch绘制彩虹灯柱 一、题目要求 1、准备工作 2、功能实现 二、案例分析

无需编程,小白也能建立个人网站

想要搭建一个属于自己的网站,但又不懂编程?别担心,现在有一个简单的方法可以帮助你轻松实现这个愿望。只需要几个简单的步骤,就可以让小白也能搭建出一个漂亮的网站。 首先,登录乔拓云账号,点击网站搭建进入…

【华为OD:C++机试】Day-1

目录 🌷1. 统计监控、需要打开多少监控器: 🌷2. 阿里巴巴找黄金宝箱: 🌷3. 事件推送: 🌷4. 分苹果: 🌷5. 乱序整数序列两数之和绝对值最小: 🌷6.卡…

【影刀演示_发送邮件的格式化HTML留存】

发送邮件的格式化HTML留存 纯文本: 亲爱的小张: 端午节将至,公司为了感谢大家一年以来的辛勤工作和付出,特别为大家准备了京客隆超市福利卡,希望为大家带来些许便利和节日的喜悦。 以下是您的福利卡卡号和密码,请您…

2.预备知识

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 知识框架No.1 数据预处理一、N维数组样例二、创建数组三、访问元素四、数据操作五、数据预处理六、D2L注意点 No.2 线性代数一、标量二、向量1、基本操作2、空间表示3、乘法 三、矩阵1、基本操作2、乘法3、空间表示4、乘法5、范数6、…

大部分人都不知道产品说明书有这些特点

企业网站产品说明书是企业展示产品信息的重要工具。它不仅提供了清晰的产品介绍、详细的技术规格、直观的使用指南和专业的设计与排版,还能帮助企业主、市场营销人员和潜在客户更好地了解产品。 | 1.清晰的产品介绍 产品特点、功能和优势 通过清晰的产品介绍&…

如何和安装Windows10系统教程(最新最详细)

目录 一.简介 二.安装步骤 软件:Windows 10版本:1909语言:简体中文大小:4.95G安装环境:Win10/Win8/Win7(64位)硬件要求:CPU2.0GHz 内存4G(或更高)下载通道①丨百度网盘&#xff1a…

Apollo安装全攻略

安装方式 概述快速安装安装基础软件安装 Ubuntu Linux安装 Docker Engine 安装 Apollo 环境管理工具获取 GPU 支持(可选)创建和进入 Apollo 环境容器 源码安装安装 Linux 系统(可选)安装 NVIDIA GPU 驱动安装 docker下载并编译 Ap…

toon boom harmony基础

以下都是tbh快捷键使用,或者一些常用功能介绍 1、在节点视图中,按回车可直接弹出节点库搜索框 2、中心线编辑器 只能编辑用笔刷画出来的线条,铅笔画出来的线条无法编辑。 3、镜头标记 1 右键箭头方向,可弹出下拉,&am…

铁轨(Rails, ACM/ICPC CERC 1997, UVa 514)rust解法

有一个火车站,铁轨铺设如图6-1所示。有n节车厢从A方向驶入车站,按进站顺序编号为1~n。你的任务是判断是否能让它们按照某种特定的顺序进入B方向的铁轨并驶出车站。例如,出栈顺序(5 4 1 2 3)是不可能的,但(5 4 3 2 1)是…

jmeter中beanshell的用法小结

本文主要介绍了jmeter中beanshell的用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 一、什么是Bean Shell BeanShell是用Java写成的,一个小型的、免费的、…

CV计算机视觉每日开源代码Paper with code速览-2023.10.26

精华置顶 墙裂推荐!小白如何1个月系统学习CV核心知识:链接 点击CV计算机视觉,关注更多CV干货 论文已打包,点击进入—>下载界面 点击加入—>CV计算机视觉交流群 1.【基础网络架构:Transformer】(Ne…

处理大数据的基础架构,OLTP和OLAP的区别,数据库与Hadoop、Spark、Hive和Flink大数据技术

处理大数据的基础架构,OLTP和OLAP的区别,数据库与Hadoop、Spark、Hive和Flink大数据技术 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话&am…

自学SLAM(5)《第三讲:李群和李代数》作业

前言 小编研究生的研究方向是视觉SLAM,目前在自学,本篇文章为初学高翔老师课的第三次作业。 文章目录 前言1.群的性质2.验证向量叉乘的李代数性质3.推导 SE(3) 的指数映射4.伴随5.轨迹的描绘6.* 轨迹的误差(附加题) 1.群的性质 课上我们讲解了什么是群。…

Linux--进程替换

1.什么是进程替换 在fork函数之后,父子进程各自执行代码的一部分,但是如果子进程想要执行一份全新的程序呢? 通过进程替换来完成,进程替换就是父子进程代码发生写时拷贝,子进程执行自己的功能。 程序替换就是通过特定的…

GPT出大错了!原来GPT不是万能的!这就是人类存在的意义!

目录 前言 测试方式 测试 问题一 问题二 问题三 问题四 结尾 前言 Chat GPT大家应该都听说过,但是它真的有想象中的那么强大吗?这篇文章带你深入了解。 这几个月GPT非常火爆,我也是经常用到。GPT是一个只能聊天机器人,能…

高等数学前置知识——二次函数

文章目录 二次函数1.1 二次函数1.2 二次函数的图像1.2.1 a > 0 时1.2.2 a < 0 时1.2.3 二次函数的平移1.2.4 普通二次型函数图像总结 1.3 其他形式的二次函数1.3.1 顶点式1.3.2 交点式 1.4 二次函数与直线的交点 二次函数 1.1 二次函数 二次函数的定义&#xff1a;y a…