OpenCV笔记整理【直方图和掩模】

article/2025/10/1 2:41:53

1. 直方图:

直方图统计图像中各个灰度级出现的次数,横坐标为各个像素点的灰度级,纵坐标是具有该灰度级的像素个数。
在这里插入图片描述
上面这个九宫格我们可以想象成一张图像,里面的数字代表当前像素的灰度等级。

用图表显示:X轴代表灰度级,Y轴代表统计次数。
在这里插入图片描述
在实际处理中,X轴代表8位的256个灰度级[0-255],Y轴代表具有相应的灰度级的像素点的个数。
示例: 统计这个纯白色背景下的黑色8的图像的直方图
在这里插入图片描述
在这里插入图片描述

2. 绘制直方图:

模块matplotlib.pyplot 提供了一个类似 MATLAB 的绘图框架,其中hist()函数可以用来绘制直方图。

hist( X,BINS)

  • X为数据源,必须是一维的,二维图像需要通过ravel()函数转换为一维数组之后传入hist()函数。
  • BINS为灰度的分组情况,相当于前面的Y。

上代码:

import cv2
import matplotlib.pyplot as plto=cv2.imread("image\\8.bmp")
cv2.imshow("original",o)
# 显示直方图
plt.hist(o.ravel(),256) # 将o转换为一维数组,然后显示256个等级【0-255】cv2.waitKey()
cv2.destroyAllWindows()

3. OpenCV中绘制直方图:

hist = cv2.calcHist( images, channels, mask, histSize, ranges, accumulate )

  • hist返回一个一维数组,数组中是每个灰度等级的像素个数。
  • images为原始图像,注意用[]括起来。
  • channels为通道,单通道为[0],彩色通道分别用[0],[1],[2]表示B,G,R。
  • mask为掩模,没有掩模的时候传None。
  • histSize表示BINS子集,注意用[]括起来。
  • ranges表示像素范围,比如单通道[0,255]。
  • accumlate暂时为空。

上代码:

import cv2
import numpy as npimg=cv2.imread("image\\hist.png")
# 计算直方图
hist = cv2.calcHist([img],[0],None,[2],[0,256]) # 这里像素范围[0,255]只能返回0灰
# 度等级的像素数,至于原因求高手分析???print(hist)cv2.waitKey()
cv2.destroyAllWindows()

运行:
在这里插入图片描述

使用plot分通道提取直方图代码:

import cv2
import matplotlib.pyplot as plto=cv2.imread("image\\girl.bmp")
cv2.imshow("original",o)
histb = cv2.calcHist([o],[0],None,[256],[0,255]) # channels中[0][1][2]分别代表BGR通道
histg = cv2.calcHist([o],[1],None,[256],[0,255])
histr = cv2.calcHist([o],[2],None,[256],[0,255])plt.plot(histb,color='b') 
plt.plot(histg,color='g')
plt.plot(histr,color='r')
plt.show()

运行:
在这里插入图片描述

4. 掩模后绘制直方图:

与运算:
当M=1时:O AND M = 原图O
当N=0时:O AND M = 0(零)
在这里插入图片描述
构造一个掩模图像

import cv2
import numpy as npmask=np.zeros([600,600],np.uint8) #构造一个像素为0的二维数组
mask[200:400,200:400]=255 # 将X200-X400、Y200-Y400之间的数组值改为255cv2.imshow('mask',mask)
cv2.waitKey()
cv2.destroyAllWindows()

运行:
在这里插入图片描述
绘制一个掩模后的图像的直方图:

import cv2
import numpy as np
import matplotlib.pyplot as pltimage=cv2.imread("image\\girl.bmp",cv2.IMREAD_GRAYSCALE)# 创建一个原图一个大小的二维数组,元素0黑色
mask=np.zeros(image.shape,np.uint8)
# 掩模,改变200-400区域为白色
mask[200:400,200:400]=255# 将原图和掩模图进行与运算,黑色区域被消除
m=cv2.bitwise_and(image,mask)# 计算原图和掩模后图像的直方图
histImage=cv2.calcHist([image],[0],None,[256],[0,255])
histMI=cv2.calcHist([image],[0],mask,[256],[0,255])
plt.plot(histImage,color='r')
plt.plot(histMI,color='g')cv2.imshow("o",image)
cv2.imshow("mask",mask)
cv2.imshow("maskImg",m)cv2.waitKey()
cv2.destroyAllWindows()

运行:
在这里插入图片描述
在这里插入图片描述
Over。。。。。。。。。。。。。。。


http://chatgpt.dhexx.cn/article/CLuIdKW4.shtml

相关文章

数字图像处理 掩模

将logo叠加在图片上 将logo图片进行灰度化阈值处理得到掩模 (需要的部分是置非0 不需要的黑色的部分置0) 然后需要利用掩模对logo图像和人物图像分别进行处理 对logo图: 需要把黑色部分去掉-----与掩模进行与操作把黑色部分置0 Ps:黑色部分用add叠加时相当于没有…

OpenCV基本功 之 图像的掩模、运算 合并专题 -小啾带学【Python-Open_CV系列(七)】

OpenCV图像的掩模、运算 与 合并专题 【Python-Open_CV系列(七)】 文章目录 1.图像的掩模2.图像的运算2.1 图像的加法运算2.1.1 “”方法2.1.2 cv2.add()方法2.1.3 使用掩模遮盖相加结果 2.2 图像的位运算2.2.1 按位与 cv2.bitwise_and()2.2.2 按位或 c…

空间掩模matlab,浅谈基于SLM的非相干全息系统掩模设计及成像处理

宋冲 摘要:基于空间光调制器(Spatial Light Modulator,SLM)的菲涅尔非相干相关数字全息系统,无需对物体在空间或时间上进行扫描,可以快速获取真实三维物体的全息图,在荧光生物样品显微成像、彩色全息显示、以及自适应光学等领域展示了极大应用潜力。通过本项目的研究,为S…

matlab 掩模,用于图像中的与脸部有关的选择和处理的图像掩模制造技术

【技术实现步骤摘要】 【国外来华专利技术】【专利说明】用于图像中的与脸部有关的选择和处理的图像掩模相关串请的交叉引用本申请要求对通过完全引用而结合于此、提交于2013年5月14日的第13/894,384号美国专利申请的优先权。 技术介绍 数字相机的流行和便利以及因特…

图像掩模matlab,图像掩模_matlab_图像掩模

光学图像处理中,掩模可以足胶片、滤光片等。数字图像处理中,掩模为二维矩阵数组,有时也用多值图像。数字图像处理中,图像掩模主要用于:①提取感兴趣区,用预先制作的感兴 未来手机触摸屏要靠无掩模光刻技术_多点触摸 337x396 - 29KB - JPEG 5.4.3 选择式掩模平滑 - 51CTO.COM 53…

图像中的掩膜(Mask)是什么

项目github地址:bitcarmanlee easy-algorithm-interview-and-practice 欢迎大家star,留言,一起学习进步 在图像处理中,经常会碰到掩膜(Mask)这个词。那么这个词到底是什么意思呢?下面来简单解释一下。 1.什么是掩膜 …

第三章-OpenCV基础-4-掩模

基本概念 掩模,又称为掩膜,掩码,模板。图像掩模是指,用特定的图像/图形/物体遮挡代处理的图像(全部或局部),从而控制图像处理的区域,在数字图像处理中,掩模就是一个指定的数组,毕竟,图像也是数组。 左边图为原图,中间图为掩模(白色区域为透明区域,黑色区域为黑色遮挡区域),经过…

在微信小程序中如何引入iconfont

在微信小程序如何引用iconfont? 1.首先进入iconfont 选择自己喜欢的图标 iconfont-阿里巴巴矢量图标库 2.选择自己喜欢的图标加入购物车 3.将图标添加至项目(如果没有项目就随便新建一个项目) 4.打开个人主页 找到自己的项目,点…

微信小程序引入iconfont

第一种 在tabBar中使用 只能下载到本地,放在文件夹中使用 如下图: 第二种 在页面内使用iconfont图标 1:复制代码 2:粘贴到wxss文件里 3:在app.wxss中引入该文件 4:就可以在文件里面使用iconfont图…

微信小程序中使用tabBar

文章目录 前景知识小程序项目app.jsonpages/home/home.wxmlpages/camera/camera.wxmlpages/user/user.wxml 相关链接 前景知识 前面我们学习过:在app.json里对小程序进行全局配置,app.json的文件内容是一个JSON对象,包含很多属性&#xff0c…

微信小程序|icon列表跳转不同界面

效果&#xff1a; 包含图片、文字&#xff0c;分列布局&#xff0c;点击对应图标跳转到相应界面 WXML&#xff1a; <!-- 三个主要功能:文书服务&#xff0c;在线咨询&#xff0c;律师匹配跳转到对应页面&#xff0c;可以返回注意php后台和数据库搭建--><view class&…

微信小程序引入阿里巴巴icon步骤及报错解决

首先将选择好的图标加入购物车,点击右上角购物车图标&#xff0c;将其添加进项目中。(Add To Project) 添加进入项目后&#xff0c;会自动跳转到该项目&#xff0c;选择Download Code&#xff0c; 解压缩包&#xff0c;只会用到文件夹中的4个文件&#xff0c;将解压后的下面4个…

微信小程序引入iconfont图标

一、查看iconfont项目设置 二、生成在线链接 为什么要生成在线链接&#xff0c;因为微信小程序不能用静态文件 三、根据下载的iconfont.css配置app.wxss 下载的iconfont.css配置 自定义app.wxss配置 为什么不直接用iconfont.css&#xff0c;因为微信小程序不支持css只支持wxss…

《微信小程序-进阶篇》组件封装-Icon组件的实现(一)

大家好&#xff0c;这是小程序系列的第九篇文章&#xff0c;从这篇开始我们将进入提高篇&#xff0c;在这一个阶段&#xff0c;我们的目标是可以较为深入的了解组件化开发&#xff0c;并且实践积累一些后续项目也就是原神资料站中用得着的组件&#xff1a; 1.《微信小程序-基础…

uniapp与微信小程序引入iconfont

加入购物车&#xff0c;下载解压 引入 uniapp 微信小程序 使用 icon更新后更换线上url&#xff0c;就不用每次下载解压

微信小程序引入下载至本地的iconfont图标

在写小程序项目中遇到icon图标引入不起作用&#xff0c;原因是因为小程序必须先转为base64引入&#xff01; 第一步 选好自己要用的icon图标并下载至本地 下载后得到这样目录的文件 第二步 转换成base64 网址&#xff1a;https://transfonter.org/ 选择后缀为.ttf的文件 第…

《微信小程序-进阶篇》组件封装-Icon组件的实现(二)

大家好&#xff0c;这是小程序系列的第十篇文章&#xff0c;在这一个阶段&#xff0c;我们的目标是 由简单入手&#xff0c;逐渐的可以较为深入的了解组件化开发&#xff0c;并且实践积累一些后续项目也就是原神资料站中用得着的组件&#xff1a; 1.《微信小程序-基础篇》带你了…

黑马微信小程序入门

文章目录 1.环境准备1.1. 注册账号1.2 获取APPID1.3 下载开发工具 2第一个微信小程序2.1. 打开微信开发者⼯具2.2. 新建⼩程序项⽬2.3 填写项目信息 3.小程序的目录结构3.1. ⼩程序⽂件结构和传统web对⽐3.2. 基本的项⽬⽬录 4.⼩程序配置⽂件4.1. 全局配置app.json4.2 tabbar4…

【微信小程序】简洁好用的icon(94/100)

布局 <!--pages/icon/icon.wxml--> <icon class"icon-box-img" type"success" size"50"></icon> <view class"icon-box-title">成功</view> <icon class"icon-box-img" type"info&q…

【微信小程序】组件使用及属性参考

文章目录 3.1 视图容器组件3.1.1 视图容器view3.1.2 滚动视图scroll-view3.1.3 可移动视图movable-view3.1.4 覆盖视图3.1.5 滑块视图swiper 3.2 内容组件3.2.1 图标icon3.2.2 进度条progress3.2.3 文本text 3.3 导航组件3.4 小程序UI框架3.4.1 WeUI3.4.2 iView3…