【数字图像处理实验二】:RGB图3个通道的提取、RGB图转灰度图、图片反转、图片亮度调整、直方图显示_jupter rgb灰度直方图提取-程序员宅基地

技术标签: python  计算机视觉  数字图像处理基础入门  opencv  

前言

这里介绍:RGB图3个通道的提取、RGB图转灰度图、图片反转、图片亮度调整、直方图显示具体操作,需导入的库如下:

from skimage import exposure
import cv2

原图如下:

# 读取图片
lena = cv2.imread("lena.tif")  

# 显示图片
cv2.imshow('lena', lena)
cv2.waitKey(0)

在这里插入图片描述

一、RGB图3个通道的提取

# 读取图像
lena = cv2.imread("lena.tif")  

# RGB3个通道的提取
(B, G, R) = cv2.split(lena)  #提取R、G、B分量,opencv读取顺序是BGR,所以提取顺序也是BGR
cv2.imshow("Red",R)
cv2.imshow("Green",G)
cv2.imshow("Blue",B)
cv2.waitKey(0)

结果如下,从左到右分别是:Red,Green,Blue
在这里插入图片描述

二、RGB图转灰度图

灰度图就是在黑白之间划分0-255个颜色深度的图像

# 读取图像
lena = cv2.imread("lena.tif")  

# RGB图转为灰度图
gray_lena = cv2.cvtColor(lena, cv2.COLOR_BGR2GRAY)

# 显示图片
cv2.imshow('gray_lena', gray_lena)
cv2.waitKey(0)

在这里插入图片描述

三、图片反转

# 读取图像
lena = cv2.imread("lena.tif")  

# 图片反转
re_lena = 255 - lena  # 图片中的像素值是0-255的整数,所以反转就是255减去每个位置的像素值

# 显示图片
cv2.imshow('re_lena', re_lena)
cv2.waitKey(0)

在这里插入图片描述

四、图片亮度调整

这里借助skimage库中的exposure函数来进行图像亮度的调整

如果gamma > 1,新图像比原图像暗
如果gamma < 1,新图像比原图像亮

# 读取图像
lena = cv2.imread("lena.tif")  

# 亮度变换
lena_gam1 = exposure.adjust_gamma(lena, 2)   #调暗
lena_gam2 = exposure.adjust_gamma(lena, 0.5)  #调亮
cv2.imshow('lena_gam1', lena_gam1)
cv2.imshow('lena_gam2', lena_gam2)
cv2.waitKey(0)

结果如下:
在这里插入图片描述

五、直方图显示

这里用 plt.hist( ) 函数进行直方图显示,每次都要将图片中的多维数组转为一维数组,下面是lena的灰度图的直方图。

# 读取图像
lena = cv2.imread("lena.tif")  

# 转为灰度图
gray_lena = cv2.cvtColor(lena, cv2.COLOR_BGR2GRAY)

# 绘制直方图
plt.hist(gray_lena.flatten(),  # flatten 转一维数组
         bins=256,  # 指定直方图中长方形的个数,像素是0-255,所以是256
         edgecolor='blue',  # 指定直方图中长方形边框的颜色
         facecolor='red'    # 指定直方图中长方形内部的颜色
         )
         
# 显示直方图
plt.show()

结果如下:
在这里插入图片描述


总代码如下:

from skimage import exposure
import cv2

# 读取图片
lena = cv2.imread("lena.tif")  # cv2 读Breast的方式为多维数组

# 显示图片
cv2.imshow('lena', lena)
cv2.waitKey(0)



# RGB3个通道的提取
(B, G, R) = cv2.split(lena)#提取R、G、B分量
cv2.imshow("Red",R)
cv2.imshow("Green",G)
cv2.imshow("Blue",B)
cv2.waitKey(0)



# RGB图转为灰度图
gray_lena = cv2.cvtColor(lena, cv2.COLOR_BGR2GRAY)

# 显示图片
cv2.imshow('gray_lena', gray_lena)
cv2.waitKey(0)



# 图片反转
re_lena = 255 - lena

# 显示图片
cv2.imshow('re_lena', re_lena)
cv2.waitKey(0)



# 亮度变换
lena_gam1 = exposure.adjust_gamma(lena, 2)   #调暗
lena_gam2 = exposure.adjust_gamma(lena, 0.5)  #调亮
cv2.imshow('lena_gam1', lena_gam1)
cv2.imshow('lena_gam2', lena_gam2)
cv2.waitKey(0)


# 绘制直方图
plt.hist(gray_lena.flatten(),  # flatten 转一维数组
         bins=256,  # 指定直方图中长方形的个数,像素是0-255,所以是256
         edgecolor='blue',  # 指定直方图中长方形边框的颜色
         facecolor='red'    # 指定直方图中长方形内部的颜色
         )
         
# 显示直方图
plt.show()

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45887062/article/details/125582804

智能推荐

sort与sorted的区别_sort和sorted函数的区别-程序员宅基地

文章浏览阅读1.3w次,点赞41次,收藏217次。一、sort()sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数原型:sort(key,reverse=False)key:用来指定一个函数,此函数在每次元素比较时被调用,此函数代表排序的规则,也就是你按照什么规则对你的序列进行排序;reverse:是用来表明是否逆序,默认的False情况下是按照升序的规则进行排序的,当reverse=True时,便会按照降序进行排序。例如:1、list=[2,24,8,6,35,7,22,30]list.sort()pri_sort和sorted函数的区别

Mutual Supervision for Dense Object Detection(ICCV2021)阅读笔记-程序员宅基地

文章浏览阅读299次。同上一篇一样,这边摸鱼笔记也是关于分类和回归分支的权重设计。Mutual Supervision for Dense Object Detection(ICCV2021)阅读笔记_mutual supervision for dense object detection

探索DLT645:一种智能电表通讯协议的实现-程序员宅基地

文章浏览阅读354次,点赞5次,收藏4次。探索DLT645:一种智能电表通讯协议的实现项目地址:https://gitcode.com/WKJay/DLT645在能源管理领域,尤其是在智能家居和工业自动化中,高效、准确的数据采集至关重要。DLT645 是一个专注于实现中国国家标准GB/T 18039.2-2008的开源库,它提供了一种与智能电表进行通讯的标准化方式。通过这个项目,开发者可以轻松地整合智能电表数据到他们的应用中。项目简..._645协议智能电表采集

Host碰撞环境搭建原理及复现-程序员宅基地

摘要:本文介绍了通过Host碰撞来找到隐藏业务的方法,通过配置域名字典进行碰撞,成功复现了2条数据。

SAP FIORI开发入门-徐春波-专题视频课程-程序员宅基地

文章浏览阅读1.4k次,点赞3次,收藏8次。【课程目标】打造一个简单实用的 SAP FIORI 入门开发课程,帮助广大 SAP 技术人员或者希望进入 SAP 技术领域的人打开一扇门。【课程形式】视频教程 + PDF 参考资料【学习门槛】零门槛,无需任何额外知识【作者微信】eksbobo【如何入群】使用购买课程的 ID 作为请求信息,发送到作者的微信添加好友,作者会把您拉入到这门课程的微信群中。..._sap fiori开发视频教程--由浅入深学习fiori开发

启发式合并(dsu),树上启发式合并(dsu on tree)总结-程序员宅基地

文章浏览阅读232次。启发式合并(dsu),树上启发式合并(dsu on tree)总结_启发式合并

随便推点

携程 Apollo 配置中心 | 学习笔记 序章_apollo分布式配置黑马学习笔记-程序员宅基地

文章浏览阅读7.4k次,点赞11次,收藏45次。Apollo 携程Apollo配置中心目录导航 携程 Apollo 配置中心 | 学习笔记(一) | Apollo配置中心简单介绍 携程 Apollo 配置中心 | 学习笔记(二) | Windows 系统搭建基于携程Apollo配置中心单机模式 携程 Apollo 配置中心 | 学习笔记(三) | 自..._apollo分布式配置黑马学习笔记

什么是人工智能(AI)?—— 你需要知道的三件事-程序员宅基地

文章浏览阅读1.1k次,点赞16次,收藏25次。人工智能 (AI) 是对人类智慧行为的仿真。它通常是设计用来感知环境、了解行为并采取行动的一台计算机或一个系统。想想自动驾驶汽车:此类 AI 驱动系统将机器学习和深度学习等 AI 算法集成到支持自动化技术的复杂环境。据麦肯锡预计,到 2030 年,AI 的全球经济价值将高达 13 万亿美元。这是因为在 AI 浪潮的影响下,几乎各行各业乃至每一个应用领域的工程环节都在转型。除了自动驾驶以外,AI 还广泛应用于以下领域:机器故障预测模型,告知何时需要进行机器保养;健康和传感器分析,如病患监护系统;

VueRouter(vue-router 路由)最全笔记,实战实用,通俗易懂_router及vue-router教程-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏8次。VueRouter安装和使用vue-router安装模块化中使用使用vue-router的步骤使用history模式router-link重定向/默认路由点击事件跳转路由动态路由路由懒加载路由嵌套参数传递(一)路由元信息全局导航守卫前置全局后置钩子组件内守卫路由独享的守卫keep-alive注意URL:协议://主机:端口/路径?查询(query)所有的组件都继承自Vue类的原型打包:npm run buildredirect:[ˌriːdəˈrekt ] 重定向replace:没有返回箭头_router及vue-router教程

运维——1.网线接在家用无线路由器LAN口依然可以上网,什么原理_路由器为啥插lan口为什么还能上网-程序员宅基地

文章浏览阅读641次。这种连接方式实际上是将路由器作为一个普通的网络交换机来使用_路由器为啥插lan口为什么还能上网

element-ui的el-upload上传图片自定义请求和vue-quill-editor富文本结合使用_vue中使用el-upload自定义editor-程序员宅基地

文章浏览阅读293次。vue-quill-editor默认的图片插入方式,是直接将图片转成base64编码,这样的结果是整个富文本的html片段十分冗余。我们的服务器端接收的post的数据大小都是有限制的,这样的话导致提交失败,就算不提交失败,大量的数据存入数据库也不是好事。为了解决这个问题,我考虑了两个方案,换一个富文本编辑框框架,另一个是修改vue-quill-editor的框架代码。..._vue中使用el-upload自定义editor

HTML/CSS常见的三种水平居中方式(好文备忘)_htmlcss水平居中-程序员宅基地

文章浏览阅读125次。HTML/CSS常见的三种水平居中方式_htmlcss水平居中