使用OpenCV和Python进行图像掩膜与直方图分析

文章目录

    • 引言
    • 1. 准备工作
    • 2. 加载并显示原始图像
    • 3. 创建掩膜
    • 3. 应用掩膜
    • 5. 计算并显示直方图
    • 6. 结果分析
    • 7. 总结

引言

在图像处理中,掩膜(Mask)是一个非常重要的概念,它允许我们选择性地处理图像的特定区域。今天,我将通过一个实际的例子来展示如何使用OpenCV和Python对手机图像进行掩膜处理并分析其直方图。

1. 准备工作

首先,我们需要导入必要的库:

import cv2
import numpy as np
from matplotlib import pyplot as plt

2. 加载并显示原始图像

我们首先加载一张名为"phone.png"的图像,并将其转换为灰度图:

phone = cv2.imread('phone.png', cv2.IMREAD_GRAYSCALE)
cv2.imshow('phone', phone)
cv2.waitKey(0)

cv2.IMREAD_GRAYSCALE参数告诉OpenCV以灰度模式加载图像。cv2.imshow()用于显示图像,cv2.waitKey(0)则等待用户按键后才继续执行。

  • 图像显示如下:

在这里插入图片描述

3. 创建掩膜

接下来,我们创建一个与原始图像大小相同的全黑图像作为掩膜基础:

mask = np.zeros(phone.shape[:2], np.uint8)  # 创建黑白图像,用于制作mask
mask[50:350, 100:470] = 255
cv2.imshow('mask', mask)
cv2.waitKey(0)

这里,我们在掩膜上定义了一个矩形区域(从y=50到350,x=100到470),并将该区域设置为白色(255),其余部分保持黑色(0)。这个白色矩形就是我们的感兴趣区域(ROI)。

  • 图片显示如下:

在这里插入图片描述

3. 应用掩膜

使用按位与操作将掩膜应用到原始图像上:

phone_mask = cv2.bitwise_and(phone, phone, mask=mask)
cv2.imshow('phone_mask', phone_mask)
cv2.waitKey(0)

cv2.bitwise_and()函数执行按位与操作,由于我们使用了相同的图像作为两个输入,实际上就是使用掩膜来选择图像的部分区域。在掩膜为白色的区域,原始图像内容会被保留;在掩膜为黑色的区域,结果图像对应位置会被置为0(黑色)。

  • 图片显示如下:

在这里插入图片描述

5. 计算并显示直方图

最后,我们计算掩膜区域内图像的直方图:

phone_hist_mask = cv2.calcHist([phone], [0], mask, [256], [0,256])
plt.plot(phone_hist_mask)  # 使用calcHist的值绘制曲线图
plt.show()

cv2.calcHist()函数的参数解释:

  • [phone]: 输入图像列表
  • [0]: 计算直方图的通道索引(灰度图只有0通道)
  • mask: 使用的掩膜
  • [256]: 直方图的bin数量
  • [0,256]: 像素值范围

然后我们使用Matplotlib的plt.plot()函数绘制直方图曲线,plt.show()显示图表。

  • 直方图显示如下:

在这里插入图片描述

6. 结果分析

通过这个过程,我们可以:

  1. 清晰地看到原始手机图像
  2. 观察我们定义的掩膜区域
  3. 查看应用掩膜后的效果(只有ROI区域可见)
  4. 分析ROI区域的像素值分布(直方图)

直方图可以帮助我们了解图像的对比度、亮度分布等信息,对于后续的图像处理(如阈值分割、对比度增强等)非常有帮助。

7. 总结

通过这个简单的例子,我们学习了如何使用OpenCV进行基本的图像掩膜操作和直方图分析。这些技术是更复杂图像处理任务的基础,掌握它们将为你的计算机视觉之旅打下坚实基础。

希望这篇博客对你有所帮助!如果你有任何问题或建议,欢迎在评论区留言。

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

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

相关文章

Genio 1200 Evaluation MT8395平台安装ubuntu

官网教程: Getting Started with Genio 1200 Evaluation Kit — Ubuntu on Genio documentation Windows PC工具: Setup Tool Environment (Windows) — IoT Yocto documentation 镜像下载地址: Install Ubuntu on MediaTek Genio | Ubu…

如何画好架构图:架构思维的三大底层逻辑

👉目录 0 前言 1 宏观 2 中观 3 微观 4 补充 俗话说,一图胜千言。日常工作中,当我们要表达自己的设计思路的时候,会画各式各样的图。但因为各自知识储备的差异,思维的差异,不同类型的系统侧重的架构设计点也…

Spring MVC扩展消息转换器-->格式化时间信息

Spring MVC 的消息转换器的作用:在 HTTP 请求/响应与 Java 对象之间进行转换 可以自行扩展消息转换器 一、创建对象映射规则 package com.sky.json;import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.Objec…

Elasticsearch 的自动补全以及RestAPI的使用

Elasticsearch 提供了强大的自动补全 (Autocomplete) 功能,以下为一个基础的自动补全DSL语句 {"suggest": {"my_suggestion": { // 自定义建议器名称,可按需修改"text": "ap", // 用户输入的前缀(如搜索框…

1.4、SDH网状拓扑

链形网星形网树形网环形网网孔形网 1.链形拓扑 结构: 节点像链条一样首尾依次串联连接。信号从一个节点传到下一个节点,直至终点。 特点: 简单经济: 结构最简单,成本最低,适用于沿线覆盖(如铁…

如何在 ArcGIS 中使用 Microsoft Excel 文件_20250614

如何在 ArcGIS 中使用 Microsoft Excel 文件 软件版本:win11; ArcGIS10.8; Office2024 1. 确认 ArcGIS 10.8 对 .xlsx 文件的支持 ArcGIS 10.8 支持 .xlsx 文件(Excel 2007 及以上格式),但需要安装 Microsoft Access Database …

Python----OpenCV(图像处理——图像的多种属性、RGB与BGR色彩空间、HSB、HSV与HSL、ROI区域)

Python----计算机视觉处理(opencv:像素,RGB颜色,图像的存储,opencv安装,代码展示) Python----计算机视觉处理(Opencv:图片颜色识别:RGB颜色空间,…

java设计模式[1]之设计模式概览

文章目录 设计模式什么是设计模式为什么要学习设计模式设计模式的设计原则设计模式的分类 设计模式 什么是设计模式 设计模式是前人根据经验的总结,是软件开发中的最佳实践,帮助开发者在面对复杂设计问题时提供有效的解决方案。设计模式不仅仅只是一种…

aflplusplus:开源的模糊测试工具!全参数详细教程!Kali Linux教程!(四)

使用 afl-lto clang LLVM 编译器 1. -help 显示可用选项 afl-lto --help 其他选项同上,这里不再展开叙述。 afl-lto 1. -help 显示可用选项 afl-lto --help 其他选项同上,这里不再展开叙述。 afl-network-client 1. 帮助文档 afl-network-cl…

区间合并:牛奶

区间合并:牛奶 牛奶 www.acwing.com/problem/content/description/1345/ 本质就是区间合并问题从第一次挤奶才开始计算两个最长时间 import java.util.*;public class Main {static final int N 5010;static Pair[] pairs new Pair[N];static class Pair imple…

Hive实现值列表横向展示(非列转行)

一、场景说明: 当前有各个流程的节点名称和节点时间。数仓中的表存在的格式为纵向存储,分别为节点名称、接收时间 现数据分析过程中需要将每个流程的节点时间横向展示,如果没有该节点则置空 这种区别于行转列和列转行的操作。(具体可参考博主**

蓝桥杯20151 跳石头

问题描述 小明正在和朋友们玩跳石头的小游戏,一共有 n 块石头按 1 到 n 顺序排成一排,第 i 块石头上写有正整数权值 ci​ 。 如果某一时刻小明在第 j 块石头,那么他可以选择跳向第 jcj​ 块石头 (前提 jcj≤n )或者跳…

深度学习——基于卷积神经网络的MNIST手写数字识别详解

文章目录 引言1. 环境准备和数据加载1.1 下载MNIST数据集1.2 数据可视化 2. 数据预处理3. 设备配置4. 构建卷积神经网络模型5. 训练和测试函数5.1 训练函数5.2 测试函数 6. 模型训练和评估6.1 初始化损失函数和优化器6.2 训练过程 7. 关键点解析8. 完整代码9. 总结 引言 手写数…

Activiti初识

文章目录 1 工作流介绍1_工作流概念介绍2 工作流系统3 适用行业4 具体应用5 实现方式 2 Activiti介绍1_BPM2 BPM 软件3 BPMN 3 使用步骤1_部署 activiti2 流程定义3 流程定义部署4 启动一个流程实例5 用户查询待办任务(Task)6 用户办理任务7 流程结束 4 Activiti应用1_Activiti…

CyclicBarrier入门代码解析

文章目录 核心思想:组队出游,人到齐了才出发 🚌最简单易懂的代码示例代码解析运行效果分析CyclicBarrier vs CountDownLatch 的关键区别CyclicBarrier在业务系统里面通常有什么常用的应用场景核心应用模式1. 数据并行处理与ETL(最…

Maven 配置中绕过 HTTP 阻断机制的完整解决方案

Maven 配置中绕过 HTTP 阻断机制的完整解决方案 一、背景与问题分析 自 Maven 3.8.1 版本起&#xff0c;出于安全考虑&#xff0c;默认禁止了对 HTTP 仓库的访问。这一机制通过 <mirror> 配置中的 maven-default-http-blocker 实现&#xff0c;其作用是拦截所有使用 HT…

【大厂机试题解法笔记】恢复数字序列

题目 对于一个连续正整数组成的序列&#xff0c;可以将其拼接成一个字符串&#xff0c;再将字符串里的部分字符打乱顺序。如序列8 9 10 11 12,拼接成的字符串为89101112,打乱一部分字符后得到90811211,原来的正整数10就被拆成了0和1。 现给定一个按如上规则得到的打乱字符的字…

MongoDB 事务有哪些限制和注意事项?

MongoDB 的多文档 ACID 事务虽然强大&#xff0c;但在使用时确实有一些限制和需要特别注意的事项。 以下是主要的限制和注意事项&#xff1a; 1. 性能开销 (Performance Overhead) 额外协调: 事务需要额外的协调工作&#xff0c;包括跟踪事务状态、管理锁&#xff08;即使是乐…

CTF实战技巧:获取初始权限后如何高效查找Flag

CTF实战技巧&#xff1a;获取初始权限后如何高效查找Flag 在CTF比赛中&#xff0c;获得初始访问权限只是开始&#xff0c;真正的挑战在于如何在系统中高效定位Flag。本文将分享我在渗透测试中总结的系统化Flag搜索方法&#xff0c;涵盖Linux和Windows双平台。 引言&#xff1a;…

kafka Tool (Offset Explorer)使用SASL Plaintext进行身份验证

一、前面和不需要认证的情况相同&#xff1a; 1、填写Properties中的cluster name和版本&#xff0c;以及zk的ip和port 2、Advanced中填写bootstrap servers 二、和不需要认证时不同的点&#xff1a; 1、Security的Type&#xff0c;不需要认证时选plaintext&#xff0c;需要认…