opencv图像灰度化

news2025/1/12 4:03:13
  •  

  • 图像灰度化就是将图像的亮度值(R,G,B)按照一定的方式映射到0-255之间的灰度值上,为了使图像看起来不那么单调,需要将图像的亮度值进行变换。下面简单介绍下 opencv中的灰度化函数: 1、先将图像的像素值转换为R,G,B三个分量,其中R分量用于图像灰度变换,G分量用于彩色变换。 2、然后根据灰度变换公式: 3、根据公式可以计算出每个像素点的灰度值 4、最后把这些灰度值对应到每个像素点的值上就完成了图像灰度化。 1、先将图像转换为R,G,B三个分量。 3、最后把每个像素点的灰度值对应到对应的颜色通道上。

    • 1、利用 opencv中的 image. palindrome库,调用 sobel函数来获取像素值,然后利用灰度变换函数计算出灰度值。

      1、首先使用 image. palindrome库中的 sobel函数,获取像素值,然后利用灰度变换函数计算出灰度值。 2、在 opencv中,如果想对图像的某一像素点进行灰度变换,可以直接使用 grid函数(这是一个与 class文件名同名的函数)。grid函数实现了图像中多个像素点的灰度值统一。 3、在 opencv中,我们可以通过 openCV库中的 reverse和 convert方法来实现图像灰度化。 4、具体操作如下: 1)首先将图像分成多个像素值相同的像素组,每一个像素组可以看成一个灰度值相同的灰度值为1的像素,例如在 image. palindrome库中,我们将图像分为了四个像素组: 其中每个像素组对应一个灰度变换函数,如上面代码所示。 2)然后使用 reverse和 convert方法来分别计算每个像素组的灰度变换值,通过调用 reverse函数来获取每个像素组的灰度值; 3)最后将计算得到的灰度值与图像中所有像素点灰度值相乘,即可得到图像中所有像素点的灰度值。 5、可以直接调用 grid函数,来计算图像中所有像素点的灰度值: 6、但是这种方法会将图像分割成一大片一大片的灰度区域,无法处理一些比较小的区域。例如在图片中有一个点,可以认为这个点是图像中的一个灰度值为1的像素组,那么我们就可以直接将这个点作为分割边界: 7、可以通过 symbols函数来实现图像分割。symbols函数是对一个整幅图像进行灰度变换计算得到结果。 8、为了方便理解,我们将整个图像分成四个大小相同的部分,分别是红色、绿色、蓝色和白色。这四个部分分别对应不同的颜色通道: 9、红色通道对应红色灰度值;绿色通道对应绿色灰度值;蓝色通道对应蓝色灰度值;白色通道对应白色灰度值。可以通过计算得到四个颜色通道对应的灰度变换公式:

    • 2、利用 opencv中的opencv-benchmark库,设置像素值与对应的通道阈值,然后使用opencv-benchmark库中的 gamma函数,计算出每个像素点的灰度值。

      3、在 opencv中,输入一幅图片,可以直接用 sobel函数,输出一幅灰度化后的图片。 4、我们可以使用opencv-benchmark库中的 gamma函数,将图像的亮度值映射到一个255灰度值上。 5、opencv-benchmark库中有一个函数是从一个 RGB色彩空间到另一个 RGB色彩空间的映射函数,它可以将图像灰度化后的颜色通道映射到一个 RGB颜色空间上。

    • 3、在 opencv中对每个像素点灰度值进行归一化处理,然后利用 sobel函数获取每个像素点的颜色通道。

      而根据公式,R分量可以被变换为0-255之间的任何一个值,即R分量可以被变换为0-255之间的任意一个值。因为R和G是颜色分量,所以它们能够对应到每个像素点上。 2、然后对R,G,B三个分量进行归一化处理,归一化是指在 opencv中将一张图像的 RGB值按照其灰度值进行映射的过程。RGB三个像素点中 RGB分量都是由三个不同颜色的亮度值组成的,其中第一个亮度值R代表着该像素点的颜色(红绿蓝);第二个亮度值G代表着该像素点的颜色(黄蓝绿);第三个亮度值B代表着该像素点的颜色(黑白)。归一化后的 RGB三个像素点可以被对应到三个不同通道上。由于R分量和G分量是对同一颜色通道进行映射,因此它们是相对独立的。 3、然后将这三个颜色通道分别映射到0-255之间的任意一个通道上,即把 RGB三个像素点映射到三个不同色彩通道上。最终得到灰度化后的图像。根据公式计算出每个像素点对应到哪一个颜色通道上,然后将这三个通道连接起来得到最终结果。灰度变换就完成了。 4、我们可以用 opencv来实现对图像灰度变换后得到灰度值的操作,下面就是用 opencv实现灰度化后得到灰度值对应到 RGB三个颜色通道上的代码: 5、然后使用 sobel函数将这些对应到三个不同色彩通道上的灰度值映射到 RGB颜色通道上。因为 sobel函数获取每个像素点对应到哪一个颜色通道上是由 opencv自动计算决定的,所以 sobel函数不需要我们自己去实现。 9、通过上面介绍,我们可以看出灰度变换后得到灰度值对应到 RGB三个色彩通道上都是由 opencv自动计算决定的。

    • 4、将这些灰度值对应的颜色通道作为新的颜色通道,再对新的颜色通道进行灰度变换处理。

      灰度变换是图像处理中的一种基本运算,它将灰度图像的亮度值映射到0-255之间的灰度值上。通过对图像进行灰度变换,可以得到不同亮度值对应的灰度值。 在图像处理中,利用灰度变换函数可以方便地将灰度图像转换为彩色图像,从而便于对图像进行后续处理。对原始图像进行灰度变换后,可以得到一幅新的彩色图像,而彩色图像在现实生活中也常常被人们所使用,如彩色印刷、彩色电视、彩色照片等。 opencv中的灰度化函数可以将一个灰度图像转换成一个颜色通道(RGB)的矩阵。可以对一个像素点进行灰度变换,也可以对多个像素点进行灰度变换。例如,给定一个灰度等级为9的图像: 通过计算9个像素点的灰度值和对应的颜色通道,就可以得到9个新颜色通道。将这些新颜色通道作为新的 RGB矩阵进行后续处理即可得到想要的彩色效果。

以下是几种常用的 OpenCV 图像灰度化代码:

1. 使用 cvtColor 函数将图像转换为灰度图像:
```python
import cv2
img = cv2.imread('image.jpg')
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('Gray Image', gray_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
2. 使用 cv2.imread 函数读取图像,并使用 cv2.cvtColor 函数将图像转换为灰度图像:
```python
import cv2
img = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('Gray Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
3. 使用 numpy 的 dot 函数将图像转换为灰度图像:
```python
import cv2
import numpy as np
img = cv2.imread('image.jpg')
gray_img = np.dot(img[..., :3], [0.299, 0.587, 0.114])
cv2.imshow('Gray Image', gray_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
以上是几种常用的 OpenCV 图像灰度化代码,可以根据自己的需求选择适合的方法。

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

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

相关文章

手机也可以搭建博客?安卓Termux+Hexo搭建属于你自己的博客网站 - 公网远程访问

文章目录 1. 安装 Hexo2. 安装cpolar内网穿透3. 公网远程访问4. 固定公网地址 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章,在几秒内,即可利用靓丽的主题生成静态网页。 下面介绍在Termux中安装个人hexo博客并…

【Linux】信号集及相关函数(sigemptyset、sigfillset、sigprocmask)

目录 1、信号集2、自定义信号集相关函数3、sigprocmask函数函数解析代码举例 橙色 1、信号集 多个信号组成的一个集合称为信号集,其系统数据类型为 sigset_t 。 在 PCB 中有两个非常重要的信号集,一个称为“阻塞信号集”,另一个是“未决信号…

Charles 抓包工具下载安装及基础使用

在Charles抓包工具之前讲过了Fiddler抓包工具,在讲之前先来解决读者的该怎么读这两个单词( Charles 读:雀奥斯 和 Fiddler 读:非的了 ),下面进入正题,有使用过抓包工具的或者看过之前关于Fiddle…

leecode530—二叉搜索树的最小绝对差

leecode530 二叉搜索树的最小绝对差 🔎首先要知道二叉搜索树是有序的,补充一下二叉搜索树的相关概念。 🟠 对于 BST 的每一个节点 node,左子树节点的值都比 node 的值要小,右子树节点的值都比 node 的值大。 &#x1f…

数据分析笔记:基本概念,常用图表,报告大纲

1.数据分析 1.1定义 对数据进行分析。数据分析是为了提取有用信息和形成结论而对数据加以详细研究和概括总结的过程。在实际工作中,帮助管理者判断和决策。 1.2步骤 数据分析的基本步骤包括明确思路,制定计划、数据收集、数据处理、数据分析、数据显…

chatgpt赋能Python-python_kanren

Python Kanren:一种强大的逻辑编程工具 Python Kanren是一种基于Python的逻辑编程工具,它可以帮助开发人员轻松地构建复杂的逻辑应用程序。如果您正在寻找一种可以帮助您更快地开发和测试逻辑代码的工具,那么Python Kanren绝对是一个不错的选…

MySQL 用户管理

目录 用户管理 用户 用户信息 创建用户 删除用户 修改用户密码 数据库的权限 给用户 注意:如果发现赋权限后,没有生效,执行如下指令: 回收权限 用户管理 如果我们只能使用 root 用户,这样存在安全隐患。这时…

有没有高清录制视频软件?如何录制清晰的视频?

案例:录屏画质模糊影响观看怎么办? 【我把我在电脑上的操作录制了下来,录屏虽然可以看清楚操作的步骤,但是画质比较模糊,看起来很不舒服。有没有什么方法可以录制清晰画质的视频?】 当今数字化时代&#…

Ubutun安装Anconda3

一、下载Anconda 方法一:官网下载 https://www.anaconda.com/download(比较费时) 可以点击右键复制地址 使用Wget下载 wget https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-x86_64.sh方法 2:清华源 在清华大…

Shell运维实战2-条件判断与函数

目录 Shell 条件测试与比较脚本条件测试文本测试表达式字符串测试表达式整数二元比较操作符逻辑操作符区别总结 if 语句Shell 函数基础执行 Shell 条件测试与比较 脚本条件测试 # -f判断文件是否存在,如果存在返回真,反之为假 # 一下结构类似于三元运算…

Hadoop基础学习---5、MapReduce概述和WordCount实操(本地运行和集群运行)、Hadoop序列化

1、MapReduce概述 1.1 MapReduce定义 MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个Had…

如何在宝塔面板后的阿里云服务器运行Flask项目并公网可以访问?

在你的服务器安装宝塔面板 宝塔面板是服务器运维管理系统 使用宝塔前: 手工输入命令安装各类软件,操作起来费时费力并且容易出错,而且需要记住很多Linux的命令,非常复杂。 使用宝塔后: 2分钟装好面板,一键…

二维码在中国:学术视角下的创新与实践

相关统计数据显示,全球每天要扫100亿个二维码,而中国的二维码应用占到全球九成左右,平均每人每天扫码6次以上。 作为万物互联时代的“数字身份证”,二维码在物流运输、生产制造、会议签到、移动支付、餐饮服务、资产管理、市场营…

活动在线制作投票链接如果制作投票链接线上投票链接制作

近些年来,第三方的微信投票制作平台如雨后春笋般络绎不绝。随着手机的互联网的发展及微信开放平台各项基于手机能力的开放,更多人选择微信投票小程序平台,因为它有非常大的优势。 1.它比起微信公众号自带的投票系统、传统的H5投票系统有可以图…

简单分享在微信上社区团购小程序制作步骤

打造属于自身的独立小程序拥有更高的自主性,特别是基于得店小程序的创新产品力,从设计上彰显品牌理念,到功能上进行扩展拓宽营销方式,都完全自我掌控, ● 更重要的是,相比于平台上各种复杂的机制&#xff0…

chatgpt赋能Python-python_headers

什么是Python Headers? Python Headers是Python程序的一部分,它负责导入Python模块和库。这些头文件包含有关Python模块和库的信息,它们允许程序员编写Python扩展并将它们与Python解释器连接,使其能够正确运行。 Python Headers…

Linkage Mapper Toolkit中的Pinchpoint Mapper功能解析(含实例分析)

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Linkage Mapper解密数字世界链接 白尾兔(Lepus townsendii)的Pinchpoint映射器输出和栖息地浓集区效果图: 图片来源地址 <

Fourier分析入门——第6章——连续函数的Fourier分析

目录 第 6 章 连续函数的Fourier分析 6.1 引言 6.2 Fourier模型 6.3 求取Fourier系数的实用方法 6.4 相关定理 6.4.1 线性定理(linearity) 6.4.2 平移定理(Shift theorem) 6.4.3 伸缩定理(Scaling theorem) 6.4.4 微分定理(Differentiation theorem) 6.4.5 积分定理…

【初识C语言】数组

【初识C语言】数组 一.一维数组1.什么是数组1.一维数组的创建和初始化1.数组如何创建2.数组如何初始化3.用sizeof来求数组的长度 2.一维数组的使用3.一维数组在内存中的存储方式 二. 二维数组1,什么是二维数组2.二维数组的创建3.二维数组的初始化4.二维数组的使用5.二维数组在内…

GD32F4x 加密(开启读保护功能)

参考链接1&#xff1a;&#xff08;设置读保护&#xff09; GD32F4x 如何开启读保护功能&#xff08;芯片加密&#xff09;&#xff1f;_EmbeddedOsprey的博客-CSDN博客 参考链接2&#xff1a;读取芯片ID进行加密 《嵌入式 – GD32开发实战指南》第19章 程序加密_gd32大小端…