首页 > 其他分享 >图像数据处理2

图像数据处理2

时间:2024-08-09 16:56:15浏览次数:11  
标签:颜色 像素 索引 RGB 数组 图像 数据处理

1.2 图像类型与图像数据

1.2.1RGB真彩色图像(RGB image,true color image)

RGB图像,也称为真彩色图像,是由三个相同维度的二维数组组成,每个数组分别代表图像颜色中的红色(R)、绿色(G)、蓝色(B)分量。

每个像素的颜色由这三个分量的组合决定,而每个分量通常占用8位,因此每个像素总共由24位表示,能够展示2的24次方种颜色。

Python语言中,常用一个M×N×3的NumPy三维数组来保存RGB真彩色图像。

第一维(M):代表图像的高度,即图像的行数。它决定了图像在垂直方向上的像素数量。

第二维(N):代表图像的宽度,即图像的列数。它决定了图像在水平方向上的像素数量。

第三维(3):代表每个像素的颜色通道数。在RGB颜色模型中,每个像素的颜色由红色(R)、绿色(G)、蓝色(B)三个分量组成。因此,这个维度的大小是3,分别对应R、G、B三个颜色通道。

import numpy as np

# 创建一个M×N×3的NumPy三维数组来表示RGB图像
# 这里M=100, N=100,表示图像的高度和宽度都是100像素
# 3表示RGB三个颜色通道
image = np.zeros((100, 100, 3), dtype=np.uint8)

# 设置图像的背景色为灰色,即RGB三个通道的值都相等
image[:, :, :] = [128, 128, 128]

# 修改图像中(50, 50)位置像素的颜色为红色
# 注意NumPy数组的索引是从0开始的
image[50, 50, :] = [255, 0, 0]

# 打印修改后的像素值,确认颜色是否已经改变
print(image[50, 50, :])

对[M,N,(0、1、2)]的解释

对RGB通道,[M,N,0]表示图像R分量的值,[M,N,1]表示G分量的值,[M,N,2]表示图像B分量的值

[M,N,:]则表示获取图像的RGB值。

对RGB通道,[M,N,0]表示图像B分量的值,其余同理。

1.2.2索引图像(indexd color image,palette image)

索引图像是一种特殊的图像表示方式,它将像素值直接作为颜色索引表的下标,通过查找颜色索引表来获取实际的颜色值。

索引图像数据可以通过两个二维数组来表示:

一个是M×N的二维数组,用于存储每个像素的颜色索引值;

另一个P×3的二维数组,作为颜色映射表,用于存储每个像素颜色索引值所对应的RGB颜色分量。

索引图像通过仅存储每个像素的颜色索引值而不是完整的RGB颜色信息,显著减少了图像文件的大小。这使得索引图像非常适合于网络传输、存储空间有限的环境或对加载速度有严格要求的场合。

from PIL import Image  
import numpy as np  
  
# 读取索引图像  
im = Image.open('图片地址')  
  
# 确认图像是否为索引图像  
if im.mode == 'P':  
    print('图像是索引图像')  
else:  
    print('图像不是索引图像')  
    # 如果不是索引图像,可以选择转换为索引图像,但这里为了简化,我们假设它已经是索引图像  
  
# 将索引图像转换为NumPy数组,获取颜色索引值  
imgX = np.array(im)  
print('颜色索引值数组的大小:', imgX.shape)  # 输出索引数组的形状,通常是高度x宽度  
  
# 获取索引图像的调色板  
impal = im.getpalette()  
if impal:  
    # 确定调色板的颜色数量,并将其转换为二维数组颜色表  
    num_colours = int(len(impal) / 3)  
    cmaparray = np.array(impal).reshape(num_colours, 3)  
    print('图像调色板数组的大小:', cmaparray.shape)  # 输出调色板数组的形状,通常是颜色数x3(RGB)  
    print('图像调色板数组的元素:\n', cmaparray)  # 输出调色板数组的具体颜色值  
else:  
    print('图像没有调色板,可能是因为它不是索引图像或者调色板已被移除。')  
  
# 示例:使用调色板将索引值转换为RGB颜色(这里不直接显示,但展示逻辑)  
# 假设我们要获取某个像素(x, y)的颜色  
x, y = 10, 20  # 示例像素坐标  
index = imgX[y, x]  # 获取该像素的颜色索引值  
rgb_color = cmaparray[index]  # 使用索引值从调色板中获取RGB颜色  
print('像素(x, y)的RGB颜色:', rgb_color)  

①cmaparray = np.array(impal).reshape(num_colours, 3) 

对应颜色索引表即,P×3的二维数组,P代表颜色数量。

②x, y = 10, 20  # 示例像素坐标  

x代表列,y代表行,即(y,x)
index = imgX[y, x]  # 获取该像素的颜色索引值  
rgb_color = cmaparray[index]  # 使用索引值从调色板中获取RGB颜色  

print('像素(x, y)的RGB颜色:', rgb_color)

1.2.3灰度图像(grayscale image)

灰度图像,也称为单色图像,仅使用单一的颜色通道来表示图像的亮度信息,在灰度图像中,每个像素的灰度值通常在0到255之间变化,其中0表示黑色,255表示白色,中间的灰度值表示不同程度的灰色,灰度图像可以看作是RGB图像的一个特例,其中R、G、B三个分量的值相等.

此处补充一条opencv直接以灰度图方式读入彩色图像的代码

#以灰度图像方式读入一幅彩色图像
img_gray = cv.imread('图像路径', cv.IMREAD_GRAYSCALE)

1.2.4二值图像(binary image)

二值图像是最简单的图像类型,其每个像素只能取两个值之一(通常是0和1),分别代表黑色和白色,二值图像可以看作是灰度图像的一个极端情况,其中所有像素的灰度值都被阈值化处理为0或255,由于二值图像只有两个灰度级别,因此它的存储空间非常小,处理速度也很快。

应用:二值图像广泛应用于文字识别、边缘检测、图像分割等领域。

注,本人为在校学生,博客是边学边写的,主要是为了巩固知识,如有错误请积极指正

标签:颜色,像素,索引,RGB,数组,图像,数据处理
From: https://blog.csdn.net/2301_80400361/article/details/141023552

相关文章

  • OpenCV图像滤波(6)高斯滤波函数GaussianBlur()的使用
    操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:VisualStudioCode编程语言:C++11算法描述函数使用高斯滤波器对图像进行模糊处理。该函数使用指定的高斯核对源图像进行卷积。支持原位过滤。高斯模糊是一种有效的图像平滑技术,可以减少图像中的噪声和细节。函数原型vo......
  • OpenCV图像滤波(7)cv::getDerivKernels() 函数的使用
    操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:VisualStudioCode编程语言:C++11算法描述函数返回用于计算空间图像导数的滤波系数。该函数计算并返回用于空间图像导数的滤波系数。当ksize=FILTER_SCHARR时,生成Scharr3x3核(参见Scharr)。否则,生成Sobel核(参见Sob......
  • 【11月杭州,邀您投稿参会】2024年计算机视觉与图像处理国际学术会议 (CVIP 2024)
    【重要信息】会议官网:iccvip.org大会时间:2024年11月15日-17日大会地点:中国杭州一轮截稿日期:2024年8月21日接受/拒稿通知:投稿后1周内收录检索:EICompendex,Scopus【大会简介】2024年计算机视觉与图像处理国际学术会议(CVIP2024)将于2024年11月15日-17日在中国杭州举......
  • 医学图像分割的基准:TransUnet(用于医学图像分割的Transformer编码器)器官分割
    1、TransUnet介绍TransUnet是一种用于医学图像分割的深度学习模型。它是基于Transformer模型的图像分割方法,由AI研究公司HuggingFace在2021年提出。医学图像分割是一项重要的任务,旨在将医学图像中的不同结构和区域分离出来,以便医生可以更好地诊断和治疗疾病。传统的医学......
  • 在国产芯片上实现YOLOv5/v8图像AI识别-【2.3】RK3588上使用C++启用多线程推理更多内容
    本专栏主要是提供一种国产化图像识别的解决方案,专栏中实现了YOLOv5/v8在国产化芯片上的使用部署,并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。B站配套视频:https://www.bilibili.com/video/BV1or421T74f基础背景对于国产化芯片来说,是采用NPU进......
  • 一个基于SpringBoot实现的图像托管程序
    大家好,我是Java陈序员。今天,给大家介绍一个基于SpringBoot实现的开源图床项目。关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。项目介绍Tbed——一个由Java语言编写、SpringBoot框架开发的开源图像托管程序。具备多对象......
  • 多尺度病理图像纹理特征作为肺腺癌预后预测的新指标|文献精读·24-08-09
    小罗碎碎念这一期推文分享的文献是2022年发表于JournalofTranslationalMedicine的一篇文章,目前IF=6.1。这篇文章值得刚入门病理AI领域的老师/同学仔细研读,因为思路清晰,该讲到的流程基本都涉及了,详细讲述了病理图像的各种纹理特征,并给出了具体的计算方式。此外,还介......
  • fpga图像处理实战-RGB转YCBCR(YUV)算法
    YCBCR        YCbCr是一种用于数字图像和视频的颜色空间。它将颜色分解为亮度(Y)和两个色度分量(Cb和Cr)。这种分解使得视频压缩和传输更加高效,因为人眼对亮度变化更敏感,而对色度变化较不敏感。        亮度(Y):亮度表示图像的灰度级别或光强度。它是RGB颜色空间中......
  • fpga图像处理实战-RGB与HSV互转
    HSV颜色模型        HSV(Hue,Saturation,Value)颜色模型是一种常用的色彩表示方式,特别适用于图像处理、计算机图形学和色彩选取工具中。它通过将颜色的表示从传统的RGB(红、绿、蓝)模型转换为更符合人类视觉感知的方式来描述颜色。以下是HSV模型的三个主要分   ......
  • fpga图像处理实战-YCBCR转RGB
    计算公式    R=Y+1.402*(V-128)=Y+1.402*CR-1.402*128  G=Y-0.344*(U-128)-0.714*(V-128)=Y-0.344*CB-0.714*CR+1.058*128   B=Y+1.772*(U-128)=Y+1.772*CB-1.772*128FPGA实现`timescale1ns/1ps////Company://......