图像由像素组成,像素是图片元素的缩写。这些像素中的每一个都由一个红色、一个绿色和一个蓝色值组成。每种颜色的值可以在 0 到 255 之间,提供超过 1600 万种不同颜色和阴影的组合。Python 图像库 (PIL) 可用于扫描图片、提取每个像素并识别该像素的 RGB 值。在这个项目中,我编写了一个程序来拍摄 10 X 10 的图像,识别每个像素的颜色值,然后将这些值正确地传送到 LED 显示板。它加载图像、扫描图像,然后将图像实时显示在 LED 板上。
PIL 使扫描图像和检索像素值变得非常容易。当前的 Raspberry Pi OS 预装了 PIL,因此您可以开始使用了。只需导入所需的模块,然后使用下面的程序代码打开图像文件,然后测量文件的宽度和高度,然后使用代码创建一个列表来存储像素值。然后,我将像素总数(在本例中为 100)存储在一个名为 total 的变量中。这对于确保图像具有显示板所需的正确像素数很有用。file = input("请输入文件名")
im = Image.open(file + ".jpg", "r") # name of file to scan
width, height = im.size
pixel_values = list(im.getdata())
print (pixel_values)
total = (len(pixel_values))
#pixel_list = pixel_values
print ("Found ", total, "Pixels")
'total' 变量在第一行代码中用于检查图像是否包含 100 个像素,如果包含,则将第一个像素设置为绿色。这向用户表明图像已成功扫描并将显示。现在,您可能已经注意到,在这行代码中,绿色的 255 首先出现,但在正常 LED 值中,红色首先出现。这是我的硬件问题。LED 在正常的 RGB 设置中没有接线,而是 GRB!为了解决这个问题,我必须创建一个名为 npc 的新列表,然后使用 for 循环解析每个像素值,提取绿色、红色和蓝色值,然后将它们重新组合成正确的顺序,将它们存储到一个名为 RGB_correct 的变量。接下来,代码将这些正确的值写回 npc 列表。
if total == 100:
unicorn.set_pixel(9, 0, 255, 0, 0)
unicorn.show()
sleep(3)
npc = [] # list to stored new RGB values New Pixel Colours
# Sorts GRB values into RGB values
for i in range(0, 100):
pos = pixel_values[i] # pull first RGB values from list
green = pos[0] # pull out green value
red = pos[1] # pull out red value
blue = pos[2] # pull out blue value
RGB_correct = (red, green, blue)
npc.append(RGB_correct) # adds correct RGB value to new pixel colour list
#print (npc) #uncomment for testing
代码的最后一部分使用一个数组将每个新像素值存储在 LED 显示屏的正确位置。例如,存储在 npc_list 中的第一组 RGB 值位于位置 0。在名为 pic 的数组中,这个新的像素值被添加到位置 npc[0],在这个特定的 LED 上显示颜色。该阵列由 100 个 LED 中每个 LED 的特定位置组成,并包含颜色值。然后,代码使用代码 unicorn.set_pixels(pic) 将此数据直接写回 LED 板。如果图像大于 100 像素,则 ELSE 语句会显示错误消息,并且第一个像素设置为红色以指示错误。
pic = [[npc[9],npc[8],npc[7],npc[6],npc[5],npc[4],npc[3],npc[2],npc[1],npc[0]], [npc[19],npc[18],npc[17],npc[16],npc[15],npc[14],npc[13],npc[12],npc[11],npc[10]], [npc[29],npc[28],npc[27],npc[26],npc[25],npc[24],npc[23],npc[22],npc[21],npc[20]], [npc[39],npc[38],npc[37],npc[36],npc[35],npc[34],npc[33],npc[32],npc[31],npc[30]], [npc[49],npc[48],npc[47],npc[46],npc[45],npc[44],npc[43],npc[42],npc[41],npc[40]], [npc[59],npc[58],npc[57],npc[56],npc[55],npc[54],npc[53],npc[52],npc[51],npc[50]], [npc[69],npc[68],npc[67],npc[66],npc[65],npc[64],npc[63],npc[62],npc[61],npc[60]], [npc[79],npc[78],npc[77],npc[76],npc[75],npc[74],npc[73],npc[72],npc[71],npc[70]], [npc[89],npc[88],npc[87],npc[86],npc[85],npc[84],npc[83],npc[82],npc[81],npc[80]], [npc[99],npc[98],npc[97],npc[96],npc[95],npc[94],npc[93],npc[92],npc[91],npc[90]]]
unicorn.set_pixels(pic)
unicorn.show()
else:
print ("Image Too Large")
unicorn.set_pixel(9, 0, 0, 255, 0)
unicorn.show()
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !