OpenCV中图像的掩模、加法运算讲解与实战(附Python源码)

简介: OpenCV中图像的掩模、加法运算讲解与实战(附Python源码)

需要源码请点赞关注收藏后评论区留言私信~~~

图像是由像素组成的,像素又是由具体的正整数表示的,因此图像也可以进行一系列数学运算,通过运算可以获得截取、合并图像等效果。OpenCV提供了很多图像运算方法,经过运算的图像可以呈现出很多有趣的视觉效果

一、掩模

仅仅暴露原始图像中的感兴趣区域(ROI)的模板图像就被叫做掩模

掩模也叫做掩码,英文为mask,在程序中用二值图像来表示,0值区域标识被遮盖的部分,255值区域表示被暴露的部分

外科手术给患者使用的手术洞巾

例如原始图像如下

掩模后图像如下

在使用OpenCV处理图像时,通常使用numpy提供的方法创建掩模图像

下面创建三通道的掩模图像实战

利用numpy的zeros方法创建一幅掩模图像,感兴趣区域为在该图像中横坐标为20 纵坐标为50 宽为60 高为50的矩形,展示该掩模图像,调换该掩模图像的感兴趣区域和不感兴趣区域之后,再次展示该掩模图像

代码如下

import cv2
import numpy as np
# 创建宽150、高150、3通道,像素类型为无符号8位数字的零值图像
mask = np.zeros((150, 150, 3), np.uint8)
mask[50:100, 20:80, :] = 255;  # 50~100行、20~80列的像素改为纯白像素
cv2.imshow("mask1", mask)  # 展示掩模
mask[:, :, :] = 255;  # 全部改为纯白像素
mask[50:100, 20:80, :] = 0;  # 50~100行、20~80列的像素改为纯黑像素
cv2.imshow("mask2", mask)  # 展示掩模
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

二、图像的加法运算

图像的每一个像素都用整数表示的像素值,2幅图像相加就是相同位置像素值相加,最后将计算结果按照原位置重新组成一幅新图像 如下图所示

可以使用+方法,但是通常使用opencv提供的add方法 语法格式如下

dst=cv2.add(src1,src2,mask,dtype)

mask为掩模

dtype为图像深度

上述两个参数建议使用默认值

下面分别用+和add方法计算图像和

可见还是有明显的区别

import cv2
img = cv2.imread("beach.jpg")  # 读取原始图像
sum1 = img + img  # 使用运算符相加
sum2 = cv2.add(img, img)  # 使用方法相加
cv2.imshow("img", img)  # 展示原图
cv2.imshow("sum1", sum1)  # 展示运算符相加结果
cv2.imshow("sum2", sum2)  # 展示方法相加结果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

下面通过一个实例演示如何使用加运算修改图像颜色

模拟三色光叠加得到白光,现在分别创建纯蓝 纯绿和纯红三种图像 取三幅图像的相加和 查看结果

可见结果为白色,蓝色加上绿色等于青色,青色再加上红色就等于白色,结果符合光学三原色的叠加原理

import cv2
import numpy as np
img1 = np.zeros((150, 150, 3), np.uint8)  # 创建150*150的0值图像
img1[:, :, 0] = 255  # 蓝色通道賦予最大值
img2 = np.zeros((150, 150, 3), np.uint8)
img2[:, :, 1] = 255  # 绿色通道賦予最大值
img3 = np.zeros((150, 150, 3), np.uint8)
img3[:, :, 2] = 255  # 红色通道賦予最大值
cv2.imshow("1", img1)  # 展示蓝色图像
cv2.imshow("2", img2)  # 展示绿色图像
cv2.imshow("3", img3)  # 展示红色图像
img = cv2.add(img1, img2)  # 蓝色 + 绿色 = 青色
cv2.imshow("1+2", img)  # 展示蓝色加绿色的结果
img = cv2.add(img, img3)  # 红色 + 青色 = 白色
cv2.imshow("1+2+3", img)  # 展示三色图像相加的结果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

图像的加法运算中也可以运用掩模,下面通过一个实例介绍掩模的使用方法

创建纯蓝和纯红两幅图像,使用add方法对两幅图像进行加法运算,并在方法中添加一个掩模

代码如下

import cv2
import numpy as np
img1 = np.zeros((150, 150, 3), np.uint8)  # 创建150*150的0值图像
img1[:, :, 0] = 255  # 蓝色通道賦予最大值
img2 = np.zeros((150, 150, 3), np.uint8)
img2[:, :, 2] = 255  # 红色通道賦予最大值
img = cv2.add(img1, img2)  # 蓝色 + 红色 = 洋红色
cv2.imshow("no mask", img)  # 展示相加的结果
m = np.zeros((150, 150, 1), np.uint8)  # 创建掩模
m[50:100, 50:100, :] = 255  # 掩模中央位置为纯白色
cv2.imshow("mask", m)  # 展示掩模
img = cv2.add(img1, img2, mask=m)  # 相加时使用掩模
cv2.imshow("use mask", img)  # 展示相加的结果
cv2.waitKey()  # 按下任何键盘按键后
cv2.destroyAllWindows()  # 释放所有窗体

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
9月前
|
SQL 关系型数据库 数据库
Python SQLAlchemy模块:从入门到实战的数据库操作指南
免费提供Python+PyCharm编程环境,结合SQLAlchemy ORM框架详解数据库开发。涵盖连接配置、模型定义、CRUD操作、事务控制及Alembic迁移工具,以电商订单系统为例,深入讲解高并发场景下的性能优化与最佳实践,助你高效构建数据驱动应用。
1036 7
|
9月前
|
数据采集 Web App开发 数据安全/隐私保护
实战:Python爬虫如何模拟登录与维持会话状态
实战:Python爬虫如何模拟登录与维持会话状态
|
9月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
813 0
|
9月前
|
机器学习/深度学习 监控 数据挖掘
Python 高效清理 Excel 空白行列:从原理到实战
本文介绍如何使用Python的openpyxl库自动清理Excel中的空白行列。通过代码实现高效识别并删除无数据的行与列,解决文件臃肿、读取错误等问题,提升数据处理效率与准确性,适用于各类批量Excel清理任务。
799 0
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
4616 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
380 4
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
WK
|
编解码 计算机视觉 Python
如何在OpenCV中进行图像转换
在OpenCV中,图像转换涉及颜色空间变换、大小调整及类型转换等操作。常用函数如`cvtColor`可实现BGR到RGB、灰度图或HSV的转换;`resize`则用于调整图像分辨率。此外,通过`astype`或`convertScaleAbs`可改变图像数据类型。对于复杂的几何变换,如仿射或透视变换,则可利用`warpAffine`和`warpPerspective`函数实现。这些技术为图像处理提供了强大的工具。
WK
734 1
|
算法 计算机视觉
【Qt&OpenCV 图像的感兴趣区域ROI】
【Qt&OpenCV 图像的感兴趣区域ROI】
771 1

推荐镜像

更多