【Opencv学习】04-图像加法

news2024/11/17 0:18:54

文章目录

  • 前言
  • 一、图像加法混合
    • 1.1 代码
    • 1.2 运行结果
  • 二、图像的按位运算-组合相加
    • 2.1 代码
    • 2.2 运行结果
    • 示例:PPT平滑切换
      • 运行结果
  • 总结


前言

简单说就是介绍了两张图如何组合在一起。
1、混合,透明度和颜色会发生改变
2、组合,叠加起来。可以改变大小。
3、两张图片如何平滑切换
4、学会如何裁剪图片
5、明白掩码操作
6、如何将图片置于左侧右侧

一、图像加法混合

OpenCV 中的加法与 Numpy 的加法是有所不同的。OpenCV 的加法是一种饱和操作,而 Numpy 的加法是一种模操作。

使用加法,颜色会改变,如果使用混合,会得到透明效果。

不同的是两幅图像的权重不同,这就会给人一种混合或者透明的感觉。
在这里插入图片描述
通过修改 α 的值(0 → 1),可以实现非常酷的混合。

对应opencv里面的函数是addWeighted(),表示下面的公式

在这里插入图片描述

1.1 代码

'''
#Author :susocool
#Creattime:2024/2/10
#FileName:06-图像处理
#Description:图像混合
'''

import cv2
import numpy as np

img1 = cv2.imread('./233.jpg')
img2 = cv2.imread('D:\\Py-code\\opencv\\01.1-hello2\\99.jpg')

# 检查两张图片的尺寸信息
print(img2.shape)
print(img1.shape)

# 调整img2的尺寸以匹配img1
# 如果你的两张图片尺寸一样,则不需要这段,但是我总是找不好图片!!!
img2_resized = cv2.resize(img2, (img1.shape[1], img1.shape[0]))

dst = cv2.addWeighted(img1,0.5,img2_resized,0.3,0)

cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyWindow()

1.2 运行结果

在这里插入图片描述
可以看出两张图片混合在了一起。

二、图像的按位运算-组合相加

我认为这个就是将两个图片组合在了一起,因此我称呼他为组合相加。

2.1 代码

'''
#Author :susocool
#Creattime:2024/2/10
#FileName:07-图片叠加
#Description: 

'''
import cv2
import numpy as np
# 加载图像
img1 = cv2.imread('99.jpg')
img2 = cv2.imread('233.jpg')

# 我想将标志放在左上角,因此我创建了一个感兴趣区域(ROI)
rows,cols,channels = img2.shape
# 0:rows 指定了在垂直方向上选取从 0 到 rows(即图像 img2 的高度)的区域。
# 0:cols 指定了在水平方向上选取从 0 到 cols(即图像 img2 的宽度)的区域。
roi = img1[0:rows, 0:cols ]

# 现在创建标志的掩模并创建其反转掩模
img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray, 175, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)

# 现在在 ROI 中将标志区域涂黑
# 取 roi 中与 mask 中不为零的值对应的像素的值,其他值为 0
# 注意这里必须有 mask=mask 或者 mask=mask_inv, 其中的 mask= 不能忽略
img1_bg = cv2.bitwise_and(roi,roi,mask = mask)

# 从标志图像中仅获取标志区域。
img2_fg = cv2.bitwise_and(img2,img2,mask = mask_inv)

# 将标志放在 ROI 中并修改主图像
dst = cv2.add(img1_bg,img2_fg)
img1[0:rows, 0:cols ] = dst

# x、y缩放因子都是0.5意味着缩小一倍 
# 还是因为图片没选好。
resized_img = cv2.resize(img1, (0, 0), fx=0.5, fy=0.5)


cv2.imshow('res',resized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 解释一下掩码操作
    通过生成掩码和掩码的反转,我们可以确定希望处理的图像区域和希望保留或者排除的区域。

2.2 运行结果

在这里插入图片描述
补充一下运算过程的两张图
在这里插入图片描述
在这里插入图片描述

示例:PPT平滑切换

'''
#Author :susocool
#Creattime:2024/2/10
#FileName:07.1-幻灯片平滑切换
#Description:
'''
import cv2
import numpy as np

# 读取并加载两幅图像
img1 = cv2.imread('233.jpg')
img2 = cv2.imread('99.jpg')

# 确保两幅图像具有相同的尺寸
img2 = cv2.resize(img2, (img1.shape[1], img1.shape[0]))

# 创建一个空白的幻灯片容器,用于存储平滑转换的结果
slide_show = np.zeros((img1.shape[0], img1.shape[1] * 2, img1.shape[2]), dtype=np.uint8)

# 设置幻灯片的转换速度
transition_speed = 0.08

# 逐渐改变两幅图像之间的权重,实现平滑的转换
for alpha in np.arange(0, 1, transition_speed):
    blended_img = cv2.addWeighted(img1, 1-alpha, img2, alpha, 0)
    slide_show[:, :img1.shape[1], :] = img1  # 将第一幅图像放置在幻灯片的左侧
    slide_show[:, img1.shape[1]:, :] = blended_img  # 将平滑转换的结果放置在幻灯片的右侧

    cv2.imshow('Slide Show', slide_show)
    cv2.waitKey(200)

cv2.destroyAllWindows()
  • ——解释———

slide_show[:, :img1.shape[1], :] = img1
是通过切片的方法指定图像摆放的位置和范围。

  • 第一个维度:对图像的所有行进行操作
  • 第二个维度:对图像的列操作。从第一列到img1.shape[1] - 1 列
  • 第三个维度: 表示对图像的所有通道操作

运行结果

在这里插入图片描述
也许放视频更直观,但是CSDN的视频我累了。不放!!!


总结

前言即总结

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

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

相关文章

一周学会Django5 Python Web开发-Django5创建项目(用PyCharm工具)

锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计11条视频,包括:2024版 Django5 Python we…

fast.ai 深度学习笔记(四)

深度学习 2:第 2 部分第 8 课 原文:medium.com/hiromi_suenaga/deep-learning-2-part-2-lesson-8-5ae195c49493 译者:飞龙 协议:CC BY-NC-SA 4.0 来自 fast.ai 课程的个人笔记。随着我继续复习课程以“真正”理解它,这…

【Rust】——猜数游戏

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

Django问题报错:TypeError: as_view() takes 1 positional argument but 2 were given

一、错误位置 from django.urls import pathfrom users_app.views import RegisterView, LoginView, LogoutViewapp_name users urlpatterns [path("register/", RegisterView.as_view, name"register"),path("login/", LoginView.as_view, n…

EV/HEV中的牵引逆变器驱动优化

1、碳化硅牵引逆变器 什么是牵引逆变器?从本质上讲,牵引逆变器是电动汽车动力系统中的一个子系统,它从电池中获取高电压,并将其转换为交流电压——因此被称为逆变器——并基本上为电机供电。它控制电机速度和扭矩,直接…

《Git 简易速速上手小册》第6章:Git 在持续集成/持续部署(CI/CD)中的应用(2024 最新版)

文章目录 6.1 CI/CD基础6.1.1 基础知识讲解6.1.2 重点案例:为 Python Web 应用实现 CI/CD6.1.3 拓展案例 1:自动化部署到云平台6.1.4 拓展案例 2:使用 Docker 容器化部署 6.2 Git 与自动化测试6.2.1 基础知识讲解6.2.2 重点案例:为…

一句话总结Docker与K8S的关系

一句话总结:Docker只是容器的一种,它面向的是单体,K8S可以管理多种容器,它面向的是集群,Docker可以作为一种容器方案被K8S管理。下文继续具体介绍。 1、容器的核心概念 介绍这几个核心概念:OCI、CR、Runc、…

什么是智慧隧道,如何建设智慧隧道

一、隧道管理的难点痛点 近年来隧道建设规模不断扩大,作为隧道通车里程最多、规模最大的国家,截至2022年底,我国公路隧道共有24850处、2678.43万延米,其中特长隧道1752处、795.11万延米,长隧道6715处、1172.82万延米。…

H12-821_35

35.如图所示,SWA、SWB、SWC都运行RSTP,SWB上的GEO/O/2端口和SWC上的GEO/0/1端其端口角色为? A.backup端口.Alternative端口 B.Alternative端口、Backup端口 C.Root端口、Designate端口 D.Backup端口、Root端口 答案:A 注释: 一个链路(冲突域…

波奇学Linux:文件重定向和虚拟文件系统

重定向 文件描述符所对应的分配规则,从0开始,寻找最小没有使用的数组位置。 如图所示,关闭文件描述符的0,新打开的文件描述符为0,而关闭2,文件描述符为2。 重定向:文件输出的对象发生改变 例…

【漏洞复现】狮子鱼CMS某SQL注入漏洞01

Nx01 产品简介 狮子鱼CMS(Content Management System)是一种网站管理系统,它旨在帮助用户更轻松地创建和管理网站。该系统拥有用户友好的界面和丰富的功能,包括页面管理、博客、新闻、产品展示等。通过简单直观的管理界面&#xf…

Docker 容器网络:C++ 客户端 — 服务器应用程序。

一、说明 在下面的文章中, 将向您概述 docker 容器之间的通信。docker 通信的验证将通过运行 C 客户端-服务器应用程序和标准“ping”命令来执行。将构建并运行两个单独的 Docker 映像。 由于我会关注 docker 网络方面,因此不会提供 C 详细信息。…

桌面显示器应用Type-C接口有什么好处

随着科技的不断发展,桌面显示器作为我们日常工作中不可或缺的设备之一,也在不断更新换代。其中,Type-C接口的应用成为了桌面显示器发展的一个重要趋势。那么,桌面显示器应用Type-C接口究竟有什么好处呢? 首先&#xff…

中文点选识别

中文点选识别 测试网站:https://www.geetest.com/adaptive-captcha-demo 1. 开始验证 # 1.打开首页 driver.get(https://www.geetest.com/adaptive-captcha-demo)# 2.点击【文字点选验证】 tag WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_elemen…

MySQL篇----第十八篇

系列文章目录 文章目录 系列文章目录前言一、SQL 语言包括哪几部分?每部分都有哪些操作关键二、完整性约束包括哪些?三、什么是锁?四、什么叫视图?游标是什么?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,…

AI新工具(20240210) Osam - Osam是一个启用本地运行的开源llm;Whishper - Whishper是一个开源的语音工具

Osam - Osam是一个启用本地运行的开源“一切分割”模型工具,支持多种接口和自定义视觉模型。 Osam是一个开源工具,它允许本地运行“可对任何内容进行分割”的模型(Segment-Anything Models),灵感来源于Ollama。使用Osam,用户可以…

网络报文处理流程

报文处理流程 WLAN网络中的数据包括管理报文和业务数据报文。管理报文必须采用CAPWAP隧道进行转发,而业务数据报文除了可以采用CAPWAP隧道转发之外,还可以采用直接转发方式和Soft-GRE转发方式。 管理报文用来传送AC与AP之间的管理数据,存在于…

酷开科技荣获消费者服务平台黑猫投诉“消费者服务之星”称号

什么是优质服务?既是以客户为中心的庄严承诺,又是对服务能力提升的深耕细作;既是对服务标准的敬畏,也是对服务创新的不断探索……服务是多维的,每个企业都有自己独到的诠释,或事无巨细环环严控,…

VR和AR傻傻分不清,一句话给你讲明白。

不说废话,直接说结论,虚拟现实(Virtual Reality,VR)和增强现实(Augmented Reality,AR)。如果现实是A,虚拟是B,那么VRB,ARAB,就这简单&…

Qt 常见容器类用法(一)

目录 QMap类 QHash类 QVector类 QMap类 QMap<key,T>提供一个从类型为Key的键到类型为T的值的映射。通常&#xff0c;QMap存储的数据形式是一个键对应一个值&#xff0c;并且按照键Key的次序存储数据。为了能够支持一键多值的情况&#xff0c;QMap提供QMap<key,T&g…