“Python怎么读取像素?Python如何用像素修改颜色”的全部内容了,希望对你有所帮助。<p><h3>python数据分析模块:numpy、pandas全解<h3><p><p> 在前面,我们只

“Python怎么读取像素?Python如何用像素修改颜色”的全部内容了,希望对你有所帮助。<p><h3>python数据分析模块:numpy、pandas全解<h3><p><p> 在前面,我们只,第1张

一个计算机数字图像它本质上来说就是由很多个像素点来组成的,而图像像素点数量是通过它长宽分辨率相乘而得到的。那么下面文章就是会来讲解一下,python获取像素以及使用像素修改其颜色的方法,想要学习这个知识的小伙伴就继续往下看看吧。

一、获取像素

matplotlib、opencv、skimage、pyplot等第三方库和模块,都有方法能够将读取到python程序中将其作为图像对象。那么像素实际上指的就是分辨率,只需要使用对象shape()这个属性即可获取,下面示例为opencv读取像素的方法:

import cv2 imagess = cv2imread(r'C:\Users\Administrator\Desktop\03jpg',-1)print(imagessshape)

或者是用skimage这个第三方库之中的模块也行,使用data模块打开一个自带的之后,使用同样的属性即可获取像素,代码示例如下所示:

from skimage import dataimg=datachelsea() rows,cols=imgshape

二、访问像素修改颜色

在文章开头就已经说过了,图像本质上就是像素点来组成的,而图像之所以多种多样的原因也在于它们的颜色不同。简单来说,可以将图像看做是xy坐标系,长宽分别对应的就是x轴以及y轴。

而且python内将读取进来打开之后的形式就是多维数组像素点,那么只需要在对象后加上中括号使用切片语法。然后再其中添加x坐标、y坐标、通道索引(写冒号就是全部颜色通道修改)作为参数,之后再去用等号赋值即可修改它的颜色,代码示例如下所示:

from skimage import io,dataimg=datachelsea() R=img[:,:,0] ioimshow(R)

以上就是关于“Python怎么读取像素?Python如何用像素修改颜色”的全部内容了,希望对你有所帮助。

在前面,我们只介绍了三种图像的类型,分别位二值图像、灰度图像以及RGB图像。但我们现在常用的图像肯定是RGB图像,不过它只是色彩空间的一种类型,在实际的图像中,还有许多其他的色彩空间,对于会PS的读者来说肯定不会陌生。

比如GRAY色彩空间(灰度图像),XYZ色彩空间,YCrCb色彩空间,HSV色彩空间,HLS色彩空间,CIEL a b 色彩空间,CIEL u v 色彩空间,Bayer色彩空间等。

每个图像都有其擅长处理的内容,因此我们要掌握这些色彩空间图像的转换,以便后续更方便的处理图像的问题。

GRAY就是我们前面介绍的灰度图像,通常指8位灰度图像,其具有256个灰度级,像素值范围位[0,255]。

RGB转换位GRAY的数学公式如下:

Gray=0229 R+0587 G+0114B

而图像有GRAY色彩空间转换为RGB色彩空间时,最终所有通道的值都是相同的,其处理方式如下:

R=Gray

G=Gray

B=Gray

XYZ色彩空间是由CIE(International Commission on Illumination)定义的,是一种更便于计算的色彩空间,它不像RGB转换位GRAY,只能单向转换,XYZ色彩空间与RGB转换不会丢失任何值。

将RGB色彩空间转换为XYZ色彩空间,其转换公式为:

将XYZ色彩空间转换为RGB色彩空间,其转换公式为:

人眼视觉系统对颜色的敏感度要低于对亮度的敏感度。在传统的RGB色彩空间内,RGB三原色具有相同的重要性,但是忽略了亮度的信息。所以,才有了YCrCb色彩空间。

在YCrCb色彩空间中,Y代表光源的亮度,色度信息保存在Cr和Cb中,其中,Cr表示红色分量信息,Cb表示蓝色分量信息。

亮度给出了颜色亮或暗的程度信息,该信息可以通过照明中强度成分的加权和来计算。在RGB光源中,绿色分量的影响最大,蓝色分量的影响最小。

从RGB色彩空间转换YCrCb色彩空间的数学公式如下:

Y=0229 R+0587 G+0114B

Cr=(R-Y)0713+delta

Cb=(B-Y)0564+delta

其中delta的值为:

从YCrCb色彩空间转RGB数学公式如下:

R=Y+1403(Cr-delta)

G=Y-0714 (Cr-delta)-0344 (Cb-delta)

B=Y+1773(Cb-delta)

RGB是从硬件的角度提出的颜色模型,在与人眼匹配的过程中可能存在一定的差异。而HSV色彩空间是一种面向视觉感知的颜色模型。HSV色彩空间是从心理学和视觉的角度出发,指出人眼色彩知觉主要包含3个要素:色调,饱和度,亮度。

说到这里,相信用过PS的都应该清楚HSV到底能干什么了吧?不过,我们还是介绍一些这3个要素,毕竟本篇博文就是专门将色彩空间理论知识的,不能有空缺。

色调(H):指光的颜色,色调与混合光谱中的主要光波长相关,例如“赤橙黄绿青蓝紫”分别表示不同的色调。如果从波长的角度考虑,不同的波长的光表现为不同的颜色,实际上它们体现的是色调的差异。

饱和度(S):指色彩的深浅层度,相对于纯净度,或一种颜色混合白光的数量。纯谱色是全饱和的,像深红色(红加白)和淡紫色(紫加白)这样的彩色是欠饱和的,饱和度与所加白光的数量成反比。

亮度(V):反映的是人眼感受到的光的明暗程度,该指标与物体的反射度有关。对于色彩来讲,如果在其中掺入的白色越多,则其亮度越高;如果在其掺入的黑色越多,则亮度越低。

在具体的实现上,我们将物理空间的颜色分布在圆周上,不同的角度代表不同的颜色。因此,通过调整色调值,我们就能选取不同的颜色,色调的取值范围为[0,360]。色调取值不同,颜色也不同,具体如下表所示:

饱和度的值为[0,1],饱和度的值为0时,只有灰度,饱和度越大,颜色值越丰富。至于亮度,其取值范围也是[0,1]。

例如,博主现在取色调=0,饱和度=1,亮度=1,就可以提取色彩深红色。

介绍完理论知识,HSV与上面的色彩空间一样,也需要与RGB进行转换,不过,我们这里转换之前,需要先将RGB色彩空间的值转换到[0,1]之间,然后在进行处理。具体处理如下:

V=max(R,G,B) 亮度

这里,H的计算结果可能小于0,如果出现这种情况,则需要对H进一步的处理计算。如下所示:

上述公式计算的结果肯定与前面说的色调,亮度,饱和度的范围一致。至于HSV转RGB,感兴趣的可以参考开发文档。

HLS与HSV色彩空间类似,都具有3要素。只是HLS色彩空间就L与V不同,其中HLS色彩空间的L(光亮度/明度)替换了亮度。

那么什么是光亮度/明度呢?

其实,光亮度/明度是用来控制色彩的明暗变换,它的取值范围同样也是[0,1]。我们在程序中,可以通过光亮度/明度的大小来衡量有多少光线从物体表面反射出来。光亮度/明度对于眼睛感知颜色很重要,因为当一个具有色彩的物体处于光线太强或者太暗的地方时,眼睛是无法准确获取物体颜色的。

说实话,编辑公式有点费劲,感兴趣的自己查询开发文档,后续在python中开发,我们都是使用cv2cvtColor()进行转换的。使用起来,你只需要了解其到底做什么的,并不需要知道其内部如何实现,但内部实现,就是上面的这些数学公式。

CIEL a b色彩空间是均匀色彩空间模型,它是面向视觉感知的颜色模型。从视觉感知均匀的角度来讲,人所感知到的两种颜色的区别程度,应该与这两种颜色在色彩空间中的距离成正比。在某个色彩空间中如果人所观察的两种颜色的区别程度,与这两种颜色在该色彩空间中对应的点之间的欧式距离成正比,则称该色彩空间为均匀色彩空间。

CIEL a b 色彩空间中的L分量用于表示像素的亮度,取值范围为[0,100],表示从纯黑到纯白;a 分量表示从红色到绿色的范围,取值范围为[-127,127];b分量表示从**到蓝色的范围,取值范围为[-127127]。

由于CIEL a b 是在CIE的XYZ色彩空间上发展起来的,所以转换的时候,需要先将RGB转换为XYZ色彩空间,然后在转换为CIEL a b 。具体的数学公式感兴趣的查询开发文档。

CIEL u v 色彩空间同CIEL a b 色彩空间一样,是均匀的颜色模型。CIEL u v色彩空间与设备无关,适用于显示器显示和根据加色原理进行组合的场合,该模型中比较强调对红色的表示,即对红色的变化比较敏感,但对蓝色的变化不太敏感。

同样的,CIEL u v 色彩空间也需要先将RGB转换为XYZ色彩空间,然后在转换为CIEL u v ,具体公式感兴趣的可以查询开发文档。

Bayer色彩空间被广泛的应用在CCD和CMOS相机中。

色彩空间的理论知识,到这里基本就讲解完成了,感兴趣的可以自己扩展最后几个数学公式。

一维数组情况:

二维数组情况:

3参数情况:

2参数情况:

1参数情况:

一维情况:

二维情况:

一维情况:

二维情况:

一维情况:

二维情况:第三个参数指定维度

只查看行数、或者列数

逗号隔开两个索引

某些行

某些列

可以看出append()函数在二维数组中添加元素,结果转为了一维数组。

那怎么保持二维数组呢?可以设置axis参数按行或者按列添加

可以看出先把二维数组降成了一维数组,再在索引为1的位置添加元素。

那么怎么保持在二维添加元素呢? 同样设置axis参数

也分按行和按列删除

标记缺失值: isnan()函数

补充缺失值:

同样axis参数可以指定拼接按行还是按列

2 hstack()函数:以水平堆叠的方式拼接数组

3 vstack()函数:以垂直堆叠的方式拼接数组

第二个参数还可以是数组,指定拆分的位置

hsplit()函数:横向拆成几个数组

vsplit()函数:纵向拆成几个数组

数组与数组之间的运算

数组与数值的运算

可以指定整个数组求和,还是按行或者按列

axis=0:每一列的元素求和

axis=1:每一行的元素求和

axis=0:每一列求均值

axis=1:每一行求均值

axis=0:每一列求最大值

axis=1:每一行求最大值

pandas有两个重要的数据结构对象:Series和DataFrame。

Series是创建一个一维数组对象,会自动生成行标签。

会自动生成行列标签

也可以用字典形式生成数据

在用字典生成数据的基础上,同时指定行标签

例如对下表的数据进行读取

4月是第四个表,我们应把sheet_name参数指定为3;因为索引是从0开始的。

可以看出read_excel()函数自动创建了一个DataFrame对象,同时自动把第一行数据当做列标签。

可以看出不给出header参数时,该参数默认为0。

header=1时结果如下:

header=None时结果如下:

index_col=0时,第0列为列标签

index_col=0时

usecols=[2]:指定第二列

指定多列

数据如下:

[外链转存失败,源站可能有防盗链机制,建议将保存下来直接上传(img-j1SHxY8y-1637655972909)(C:Users14051AppDataRoamingTypora ypora-user-imagesimage-20211114192949607png)]

nrows=3时

head()函数中参数为空默认前5行

指定head(3)时如下

numpy模块也是shape

查看特定列的书库类型

特定列数据类型转换

先查看一下所有数据

与单行相比,结果显示的格式不一样了

iloc()挑选:

或者给出区间

挑选数据要么标签,要么索引挑选

或者

或者写成区间

标签挑选

或者索引挑选

先查看一下数据

或者用字典一对一修改

[外链转存失败,源站可能有防盗链机制,建议将保存下来直接上传(img-a6QKIoie-1637655972912)(C:Users14051AppDataRoamingTypora ypora-user-imagesimage-20211123110431201png)]

isin()函数查看表中是否有该值

查看特定列是否有该值

可以看出上述代码并没有替换,那怎么替换呢?

末尾插入一列

指定插入到哪列

axis参数可以指定删除行还是删除列

指定标签删除

指定索引删除

方法三

指定行标签删除

指定索引删除

方法三:

先查看所有数据

info()函数查看数据类型,还可以查看是否有缺失值

isnull()函数查看是否有缺失值

在numpy模块中用isnan()函数

删除有缺失值的行

删除整行都为缺失值的行: 需要指定how参数

不同列的缺失值设置不同的填充值

默认保留第一个重复值所在的行,删除其他重复值所在的行

保留第一个重复值所在的行

保留最后一个重复值所在的行

是重复的就删除

降序如下

参数指定first时,表示在数据有重复值时,越先出现的数据排名越靠前

获取产品为单肩包的行数据

获取数量>60的行数据

获取产品为单肩包 且 数量>60 的行数据

获取产品为单肩包 或 数量>60 的行数据

stack()函数转换成树形结构

how参数指定外连接

on参数指定按哪一列合并

concat()函数采用 全连接 的方式,没有的数设置为缺失值

重置行标签

效果与concat()一样

末尾添加行元素

指定列求和

指定列求均值

指定列求最值

获取单列的

corr()函数获取相关系数

获取指定列与其他列的相关系数

[外链转存失败,源站可能有防盗链机制,建议将保存下来直接上传(img-46g9qgQw-1637655972913)(C:Users14051AppDataRoamingTypora ypora-user-imagesimage-20211123135643804png)]

groupby()函数返回的是一个DataFrameBy对象,该对象包含分组后的数据,但是不能直观地显示出来。

分组后获取指定列的汇总情况

获取多列的汇总情况

获取多列的情况

ta = pdread_excel(‘相关性分析xlsx’)

print(data)

corr()函数获取相关系数

获取指定列与其他列的相关系数

[外链转存中…(img-46g9qgQw-1637655972913)]

groupby()函数返回的是一个DataFrameBy对象,该对象包含分组后的数据,但是不能直观地显示出来。

分组后获取指定列的汇总情况

获取多列的汇总情况

获取多列的情况

Python文本识别使用的工具是PIL和pytesser。因为他们使用到很多的python库文件,为了避免一个个工具的安装,建议使用pythonxy

pytesser是OCR开源项目的一个模块,在Python中导入这个模块即可将中的文字转换成文本。pytesser调用了tesseract。当在Python中调用pytesser模块时,pytesser又用tesseract识别中的文字。pytesser的使用步骤如下:

首先,安装Python27版本,这个版本比较稳定,建议使用这个版本。

其次,安装pythoncv。

然后,安装PIL工具,pytesser的使用需要PIL库的支持。

接着下载pytesser

最后,将pytesser解压,这个是免安装的,可以将解压后的文件cut到Python安装目录的Lib\site-packages下直接使用,比如我的安装目录是:C:\Python27\Lib\site-packages,同时把这个目录添加到环境变量之中。

完成以上步骤之后,就可以编写文本识别的Python脚本了。参考脚本如下:

from pytesser import

import ImageEnhance

image = Imageopen('D:\\workspace\\python\\5png')

#使用ImageEnhance可以增强的识别率

enhancer = ImageEnhanceContrast(image)

image_enhancer = enhancerenhance(4)

print image_to_string(image_enhancer)

tesseract是谷歌的一个对进行识别的开源框架,免费使用,现在已经支持中文,而且识别率非常高,这里简要来个helloworld级别的认识

下载之后进行安装,不再演示。

在tesseract目录下,有个tesseractexe文件,主要调用这个执行文件,用cmd运行到这个目录下,在这个目录下同时放置一张需要识别的,这里是123jpg

然后运行:tesseract 123jpg result

会把123jpg自动识别并转换为txt文件到resulttxt

但是此时中文识别不好

然后找到tessdata目录,把engtraineddata替换为chi_simtraineddata,并且把chi_simtraineddata重命名为engtraineddata

ok,现在中文识别基本达到90%以上了

1、首先明确深蓝的数据范围;

2、将转换到HSV空间,并分离三个通道为新的三个单通道;

3、H使用cvInRangeS获取“蓝”色区域的MASK。“蓝”在色度轮盘的值为240

4、同上,S获取色纯度大于一定值的MASK;

5、同上,V获取亮度在一定范围内的MASK;

6、上述三图二值化以后,做“与”运算,成为最终MASK;

7、用这个新生成的MASK去处理原图;

用image模块更直接,可以用getpixel获得像素值,给你个例子吧。

01#!/usr/bin/env python

02import Image

03import sys

04im = Imageopen(sysargv[1])

05width = imsize[0]

06height = imsize[1]

07print "/ width:%d /"%(width)

08print "/ height:%d /"%(height)

09count = 0

10for h in range(0, height):

11 for w in range(0, width):

12 pixel = imgetpixel((w, h))

13 for i in range(0,3):

14 count = (count+1)%16

15 if (count == 0):

16 print "0x%02x,/n"%(pixel[i]),

17 else:

18 print "0x%02x,"%(pixel[i]),

以上就是关于python中修改像素颜色并形成一个新图像的代码全部的内容,包括:python中修改像素颜色并形成一个新图像的代码、色彩空间类型---OpenCV-Python开发指南(7)、python数据分析模块:numpy、pandas全解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9733704.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存