图像处理学习笔记(一)

news/2024/4/28 19:10:38/文章来源:https://blog.csdn.net/qq_46093355/article/details/131690001

目录

  • 图像处理学习笔记(一)
      • 一、基础知识
        • 1、彩色图像
          • (1)RGB
          • (2)HSV
          • (3)HSI
          • (4)CMYK
          • (5)YUV
          • (6)YCbCr
        • 2、灰度图像
        • 3、二值图像
      • 二、图像灰度化
        • 1、最大值
        • 2、平均值
        • 3、加权平均值
        • 4、直接调用灰度处理的方法

图像处理学习笔记(一)

一、基础知识

1、彩色图像

(1)RGB

RGB色彩模式是工业界的一种颜色标准,通过对红R、绿G、蓝B三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是运用最广的颜色系统之一。
图像中每个像素都分成R、G、B三个基色分量,每个颜色分量都有对应灰度值[0,255],每个颜色分量可以用8位表示(还有10位表示的),若位深为8则RGB图像能构造出2的24次方种色彩,即24位色。RGB包含RGB555、RGB565、RGB24、RGB32等格式。图片大小(bit)=宽像素×高像素×位深×3。

注:文中图片源于网络。

(2)HSV

HSV是根据颜色的直观特性创建的一种颜色空间,也称六角锥体模型。H色相表示色彩信息,取值为0-360°,如按红色逆时针计算,红色0°、绿色120°、蓝色240°;S饱和度,取值为0.0-1.0;V色明度,取值为0.0(黑色)-1.0(白色),V=max(R,G,B)。
在这里插入图片描述

(3)HSI

HSI颜色模型同样是从人的视觉系统出发。H定义颜色的频率,称为色调;S表示颜色的深浅程度,称为饱和度;I表示强度或亮度,I=(R+G+B)/3。
注:饱和度是一种描述颜色纯净度的属性,单一颜色光的饱和度最高,掺入白光越多饱和度越低。饱和度=单色光强度/(单色光强度+白光强度)。
在这里插入图片描述

(4)CMYK

CMYK颜色模型是一种应用相减原理的色彩系统,它的颜色来源于反射光线。当所有的颜色叠加在一起时会产生黑色,当没有任何颜色加入的时候为白色。CMYK颜色模型包括青(cyan)、品红(magenta)、黄(yellow)和黑(black),为避免与blue混淆,黑色用K表示。彩色打印机和彩色印刷都是采用这个原理。CMY是色料三原色,利用油墨对光的吸收、透射和反射,产生不同的颜色。
在这里插入图片描述

(5)YUV

YUV是一种颜色编码方法,常使用在各个视频处理组件中。YUV在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。Y表示明亮度,也就是灰阶值,U和V表示的色度,描述影像色彩及饱和度,用于指定像素的颜色。与RGB模型相比,YUV模型最大的优点在于信号传输时只需占用极少的频宽。当白光的亮度用Y来表示时,它和红、绿、蓝三色光的关系可用下式描述:Y=0. 299R+0. 587G+0. 114B,这就是常用的亮度公式。

(6)YCbCr

YCbCr是在世界数字组织视频标准研制过程中作为ITU - R BT.601 建议的一部分,其实是YUV经过缩放和偏移的翻版。其中Y与YUV 中的Y含义一致,Cb、Cr 同样都指色彩,只是在表示方法上和U、V不同。在YUV家族中,YCbCr是在计算机系统中应用最多的成员,其应用领域很广泛,JPEG、MPEG均采用此格式。Y指亮度分量,Cb指蓝色色度分量,Cr指红色色度分量。
注:还有其他彩色图像模型,如YIQ、Lab等,此处不做概述。

2、灰度图像

灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值)。灰度范围为0-255,当灰度为255的时候,表示最亮(纯白);当灰度为0的时候,表示最暗(纯黑)。灰度化的好处是:相较于彩色图像灰度图像占内存更小,运行速度更快;灰度图像后可以在视觉上增加对比,突出目标区域。

3、二值图像

二值图像就是将像素点的灰度值设置为0或255,整个图像呈现出明显的只有黑和白的视觉效果。可以用来描述字符图像,其优点是占用空间少,缺点是当表示人物、风景图像时,二值图像只能展示其边缘信息,图像内部的纹理特征表现不明显。一般应用在车牌识别、图像的字符提取等。

二、图像灰度化

Python将彩色图像转换为灰度图像有多种方式,如使用用Pillow库函数、OpenCV库函数、matplotlib等,大致有下述三种方法:取最大值、平均值、加权平均值。

1、最大值

取R、G、B三个分量中最大的分量值,R=G=B=max(R,G,B)。

import cv2
import numpy as np
from matplotlib import pyplot as pltdef Max_Gray(img_path):img = cv2.imread(img_path)# 获取图像尺寸h, w = img.shape[0:2]# 自定义空白单通道图像存放灰度图gray = np.zeros((h, w), dtype=img.dtype)# 对原图像进行遍历,然后灰度化for i in range(h):for j in range(w):# 求最大值作为灰度值gray[i, j] = max(img[i, j, 0], img[i, j, 1], img[i, j, 2])gray = cv2.cvtColor(gray, cv2.COLOR_BGR2RGB)plt.imshow(gray)plt.title('Max_Gray')plt.show()img_path = r'B10.bmp'
Max_Gray(img_path)

2、平均值

取R、G、B三个分量的平均值,R=G=B=(R+G+B)/3。

import cv2
import numpy as np
from matplotlib import pyplot as pltdef Avg_Gray(img_path):# 接口读取图像,opencv中读取到的是BGR图像img = cv2.imread(img_path)# 获取图像尺寸h, w = img.shape[0:2]# 自定义空白单通道图像存放灰度图gray = np.zeros((h, w), dtype=img.dtype)# 对原图像进行遍历,然后灰度化for i in range(h):for j in range(w):# 求平均值作为灰度值gray[i, j] = (int(img[i, j, 0])+int(img[i, j, 1])+int(img[i, j, 2]))/3# 读取的BGR转换为RGBgray = cv2.cvtColor(gray, cv2.COLOR_BGR2RGB)plt.imshow(gray)plt.title('Avg_Gray')plt.show()img_path = r'B10.bmp'
Avg_Gray(img_path)

3、加权平均值

取R、G、B三个分量的加权平均值,因为人眼对颜色敏感度不同,所以三个分量加不同的权值,0.299×R+0.587×G+0.114×B。

import cv2
import numpy as np
from matplotlib import pyplot as pltdef WeiAvg_Gray(Img_path):img = cv2.imread(Img_path)# 获取图像尺寸h, w = img.shape[0:2]# 自定义空白单通道图像存放灰度图gray = np.zeros((h, w), dtype=img.dtype)# 对原图像进行遍历,然后灰度化for i in range(h):for j in range(w):gray[i, j] = 0.114*int(img[i, j, 0])+0.587*int(img[i, j, 1])+0.299*int(img[i, j, 2])gray = cv2.cvtColor(gray, cv2.COLOR_BGR2RGB)plt.imshow(gray)plt.title('WeiAvg_Gray')plt.show()img_path = r'B10.bmp'
WeiAvg_Gray(img_path)

注:最大值转换的灰度图亮度最高,平均值转换的灰度图像较暗,加权平均值转化的灰度图像明暗介于两者之间。
在这里插入图片描述

4、直接调用灰度处理的方法

import cv2
from matplotlib import pyplot as pltimg = cv2.imread('B1.bmp')
img1 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.subplot(121)
plt.imshow(img1)
plt.title('Src_img')# 灰度转换
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
plt.subplot(122)
plt.imshow(gray, plt.cm.gray)
plt.title('Gray_img')
plt.show()

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

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

相关文章

14款奔驰R400升级ACC自适应巡航系统,增加您的行车安全性

有的时候你是否厌倦了不停的刹车、加油?是不是讨厌急刹车,为掌握不好车距而烦恼?如果是这样,那么就升级奔驰原厂ACC自适应式巡航控制系统,带排队自动辅助和行车距离警报功能,感受现代科技带给你的舒适安全和…

Python实现Excel文件拷贝图片到另一个的Excel文件(保持原有图片比例)

Python实现Excel文件拷贝图片到另一个的Excel文件(保持原有图片比例) 1、前言1.1 成功拷贝但是比例错误1.2 直接报错 2、解决办法3、号外 1、前言 今天朋友给我一个需求,需要把xlsx文件中的图片拷贝到另一个xlsx中,但是试过网上比…

Apache(httpd) 搭建笔记

Apache 搭建笔记 安装Apache HTTP服务器:启动Apache服务并设置开机自启 配置SSL证书配置Apache的SSL虚拟主机:重启Apache服务以使更改生效: 多站点配置第一个虚拟主机配置第二个虚拟主机创建每个站点的根目录: 强制跳转http>&g…

Midjourney助力交互设计师设计网站主页

Midjourney的一大核心优势是提供创意设计,这个功能也可以用在网站主页设计上,使用Midjourney prompt 应尽量简单,只需要以"web design for..." or "modern web design for..."开头即可 比如设计一个通用SAAS服务的初创企…

阿里云AliYun物联网平台使用-客户端API获取设备传感数据

一、前言 上一篇文章中,已经实现了虚拟数据上云,本文我们将进行上位机客户端的开发,即通过调用阿里云IOT物联网云平台的SDK,开发能获取传感器的遥感数据。 二、云平台操作 调用API需要用户的AccessKey Secret,这意味着…

因创始人被捕,Multichain停运!华人加密项目信任何在?

Multichain作为第四大加密货币桥梁,允许用户在八个区块链之间转移加密货币,并持有近16亿美元的投资者存款。对于运行在Fantom区块链上的DeFi而言,多链极为重要。 然而,跨链协议MultiChain5月下旬爆出“出金延迟或暂停”的灾情&…

产业大模型刚开卷,京东跑进“最后半公里”

点击关注 文|姚 悦 编|王一粟 “京东一直在探索哪些产品、技术、场景可以真正把大模型用起来,在我们内部的场景中反复验证后,才决定在7月份对外发布,现在我们在零售、健康、物流、金融等业务场景里已经积累了一些经…

Java使用JNI实现C文件的调用

1.使用IDEA新建工程 构建最基本的maven类型就行,文件结构如下: 其中最主要的类如下: package org.linx;public class TestJNI {static {/*** 加载jni库,有一个重要的点就是生成的为libnative.so,下面加载代码需要消…

【Maven三】——maven生命周期和插件

系列文章目录 Maven之POM介绍 maven命令上传jar包到nexus 【Maven二】——maven仓库 maven生命周期和插件 系列文章目录前言一、什么是生命周期&why1.三套生命周期2.clean生命周期3.default生命周期4.site生命周期5.命令行与生命周期 二、插件目标三、插件绑定1.内置绑定2…

将媒体公司资产迁移到 Amazon S3 的技术方案

随着媒体公司的发展,他们在仓库中积累了大量的旧磁带和未数字化的视频。这些资产可能很有价值,但以目前的形式很难访问和货币化。此外,将这些资产存储在仓库中既有风险又昂贵。 媒体企业可以通过将其资产迁移到云存储来解决这些问题&#xf…

【C++】面试基础搬运

c/c c三大特性 封装 最开始接触代码是C语言,那么开始写一些逻辑代码的时候会很麻烦,因为你要在函数中定义变量,然后按顺序写对应的逻辑,接着可以将逻辑封装成函数。当时会感觉很麻烦,因为很散装,知道后面…

Nacos报错Could not resolve placeholder ‘order.name‘ in value “${order.name}“怎么解决?

出现这个原因有两个: 1.首先在Nacos配置中心,写入yml配置文件的数据和后端服务在取数据的时候名称不一致 如下图,现在我的配置中心为order-service 看看其中的文件内容信息: 再看看后端是怎么取的: 看出上面错误了吗…

C# IEnumerator 用法

一、概述 IEnumerator 是所有非泛型枚举器的基接口。 其泛型等效项是 System.Collections.Generic.IEnumerator<T> 接口。 C# 语言的 foreach 语句&#xff08;在 Visual Basic 中为 for each&#xff09;隐藏了枚举数的复杂性。 因此&#xff0c;建议使用 foreach 而不…

[每周一更]-(第54期):Go的多版本管理工具

参考 https://zhuanlan.zhihu.com/p/611253641https://learnku.com/articles/78326 前文概要 Go语言从开始使用从1.13起步&#xff0c;随着泛型的支持&#xff0c;带领团队在转型Go的时候&#xff0c;做基础组件架构选型使用1.18&#xff0c;但是Go版本不断迭代想使用最新版本…

3Ds max入门教程:创建尼亚加拉大瀑布模型

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 初学者在3ds Max中为尼亚加拉大瀑布建模 这次您将学习通过几个简单的步骤在3ds max中对尼亚加拉大瀑布&#xff08;从远处看起来很逼真&#xff09;进行建模。所以&#xff0c;让我们开始吧&#xff01; …

Flutter:EasyLoading(loading加载、消息提示)

前言 官方虽然提供了内置的加载指示器和提示信息&#xff0c;但是功能比较简陋&#xff0c;这里推荐&#xff1a;flutter_easyloading CircularProgressIndicator CircularProgressIndicator()加粗样式 ScaffoldMessenger.of(context).showSnackBar(const SnackBar(// 提示…

怎么用电脑做动图?常见动图的制作方法

常见的gif图片有两种&#xff0c;一种是通过gif合成功能制作&#xff0c;另一种是由视频转gif动图&#xff0c;那么对于日常不是专业设计出身的小伙伴&#xff0c;该使用什么样的gif制作功能&#xff0c;能够满足两种动图制作呢&#xff1f;下面这款gif制作器&#xff08;https…

UE4 常用控制台命令

ue4执行控制台命令有两种方式&#xff0c;一是在运行时按~呼出控制台输入命令后回车执行&#xff0c;二是调用蓝图函数ExecuteConsoleCommand函数传入参数执行命令&#xff0c;需要注意shipping包无法执行控制台命令 常用命令&#xff1a; Stat FPS 显示帧率 Stat Slate 显示…

快速而简单的视频格式转换方法

在数字时代&#xff0c;我们经常需要将视频文件从一种格式转换为另一种格式。无论是因为兼容性问题&#xff0c;还是为了在特定设备上播放视频&#xff0c;视频格式转换是一项非常常见的任务。本文将介绍视频格式转换的基本知识和步骤。 首先&#xff0c;了解不同的视频格式非常…

【数据结构】之红黑树

红黑树 红黑树的概念红黑树的性质红黑树的插入操作&#xff08;核心&#xff09;情况一&#xff1a;uncle存在且为红情况二&#xff1a;uncle不存在/存在且为黑&#xff08;在同一侧&#xff09;情况三&#xff1a;uncle不存在/存在且为黑&#xff08;在两侧&#xff09;总结 红…