使用python PIL处理图片。怎么获取图片的像素数据

使用python PIL处理图片。怎么获取图片的像素数据,第1张

用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]),

制作游戏时,我们最常用的格式是png,因为png可以有透明的背景,这样在游戏显示是,透明的部分不会显示,只显示我们要的那部分。但是,透明的部分依然是的一部分,当你制作了一个非矩形的按钮,会有相当多的透明部分点击有效,那么如何做到点击透明部分无效呢?这就是本片文章要讲的:获取图像像素值。当然不仅仅在制作非矩形按钮时有用,在游戏中的很多涉及处理功能的地方也大有用途。

废话不多说,直接贴源码(Cocos2d-x 3x版本):

HelloWorldSceneh文件

HelloWorldScenecpp文件:

在GetRGBA函数中,调用了OpenGL的接口glReadPixels,它用于读取一些像素。当前可以简单理解为“把已经绘制好的像素(它可能已经被保存到显卡的显存中)读取到内存”。

glReadPixels函数总共有七个参数。前四个参数可以得到一个矩形,该矩形所包括的像素都会被读取出来。(第一、二个参数表示了矩形的左下角横、纵坐标,坐标以窗口最左下角为零,最右上角为最大值;第三、四个参数表示了矩形的宽度和高度)

第五个参数表示读取的内容,例如:GL_RGB就会依次读取像素的红、绿、蓝三种数据,GL_RGBA则会依次读取像素的红、绿、蓝、alpha四种数据,GL_RED则只读取像素的红色数据(类似的还有GL_GREEN,GL_BLUE,以及GL_ALPHA)。如果采用的不是RGBA颜色模式,而是采用颜色索引模式,则也可以使用GL_COLOR_INDEX来读取像素的颜色索引。目前仅需要知道这些,但实际上还可以读取其它内容,例如深度缓冲区的深度数据等。

第六个参数表示读取的内容保存到内存时所使用的格式,例如:GL_UNSIGNED_BYTE会把各种数据保存为GLubyte,GL_FLOAT会把各种数据保存为GLfloat等。

第七个参数表示一个指针,像素数据被读取后,将被保存到这个指针所表示的地址。注意,需要保证该地址有足够的可以使用的空间,以容纳读取的像素数据。例如一幅大小为256256的图象,如果读取其RGB数据,且每一数据被保存为GLubyte,总大小就是:2562563 = 196608字节,即192千字节。如果是读取RGBA数据,则总大小就是2562564 = 262144字节,即256千字节。

注意:glReadPixels实际上是从缓冲区中读取数据,如果使用了双缓冲区,则默认是从正在显示的缓冲(即前缓冲)中读取,而绘制工作是默认绘制到后缓冲区的。因此,如果需要读取已经绘制好的像素,往往需要先交换前后缓冲。

我也最近在做看dcmtk的东西,我的理解是这样:

先创建图像对象,然后加载图像:DicomImage image = new DicomImage("K:\dcm_picture\111DCM");

在判断是否一下图像是否存在,加载状态,是否是单色图,

然后使用:image->getOutputData(),这个函数是可以获取像素的,如果要看,可以用for循环打印出来

Uint16 pixelData = (Uint16 )(image->getOutputData(8 / bits /));

for (int i = 0; i < image->getWidth() image->getHeight(); i++) {

std::cout << "pixel data : " << (pixelData + i) << std::endl;

(pixelData + i) = (pixelData + i) + pow(2, 15); }

后面就是显示的事了,我的理解是这样子。

以上就是关于使用python PIL处理图片。怎么获取图片的像素数据全部的内容,包括:使用python PIL处理图片。怎么获取图片的像素数据、Cocos2d-x之获取图像像素值、请教用DCMTK如何获得图像的像素值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/web/10144817.html

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

发表评论

登录后才能评论

评论列表(0条)

保存