如何使用Python循环每4行中的每4个像素?

如何使用Python循环每4行中的每4个像素?,python,image,audio,Python,Image,Audio,编写一个名为listenToPicture的函数,将一张图片作为参数。它首先显示了图片下一步,它将在每4行的每4个像素中循环,并执行以下操作。它将计算像素的红色、绿色和蓝色级别的总和,除以9,然后将结果加上24。该号码将是playNote播放的音符号码。 这意味着像素越暗,音符越低;像素越亮,音符越高。它将以全音量(127)播放该音符十分之一秒(100毫秒)。每次移动到新行时,它都会在控制台上打印行号(y值)。 您的主要功能将要求用户选择带有图片的文件。它将打印要播放的音符数(即图片中的像素数除

编写一个名为listenToPicture的函数,将一张图片作为参数。它首先显示了图片下一步,它将在每4行的每4个像素中循环,并执行以下操作。它将计算像素的红色、绿色和蓝色级别的总和,除以9,然后将结果加上24。该号码将是playNote播放的音符号码。 这意味着像素越暗,音符越低;像素越亮,音符越高。它将以全音量(127)播放该音符十分之一秒(100毫秒)。每次移动到新行时,它都会在控制台上打印行号(y值)。 您的主要功能将要求用户选择带有图片的文件。它将打印要播放的音符数(即图片中的像素数除以16;为什么?)。然后它将调用listenToPicture函数

这是我到目前为止所做的,我不知道如何设置每4行中每4个像素的循环。任何帮助都将不胜感激

def main():
    pic= makePicture( pickAFile())
    printNow (getPixels(pic)/16)
    listenToPicture(pic)

def listenToPicture(pic):
    show(pic)
    w=getWidth(pic)
    h=getHeight(pic)

    for px in getPixels(pic):        
        r= getRed(px)
        g= getGreen(px)
        b= getBlue(px)
        tot= (r+g+b)/9
        playNote= tot + 24

我不知道你的
pic
的类型,但是我不知道你的
pic

我想到了步进范围
range(0,len(),4)
但是我不知道你的
pic
的类型,我想最好的方法是计算4行的偏移量,当在行的末尾时,将其添加到当前位置。因此有两次迭代:一次在行内,跳过3个像素,另一次在每行末尾,跳过3行。但是,正如msw所指出的,如果没有关于pic对象的任何信息,我们就无能为力了。

我想最好的方法是计算4行的偏移量,当在行的末尾时,将其添加到当前位置。因此有两次迭代:一次在行内,跳过3个像素,另一次在每行末尾,跳过3行。但是,正如msw所指出的,如果没有关于pic对象的任何信息,我们将无法提供更多帮助。

以下是一些可以作为程序基础的构建块:

#!/usr/bin/env python
import easygui
import Image
import numpy

filename = easygui.fileopenbox() # pick a file
im = Image.open(filename) # make picture
image_width, image_height = im.size
im.show() # show picture
ar = numpy.asarray(im) # get all pixels
N = 4
pixels = ar[::N,::4]  # every 4th pixel in every N-th row
notes = pixels.sum(axis=2) / 9 + 24 # compute notes [0, 52]
print "number of notes to play:", notes.size
音符可以对应不同的音调。我在这里使用:


以下是一些您可以将您的程序建立在基础之上的构建块:

#!/usr/bin/env python
import easygui
import Image
import numpy

filename = easygui.fileopenbox() # pick a file
im = Image.open(filename) # make picture
image_width, image_height = im.size
im.show() # show picture
ar = numpy.asarray(im) # get all pixels
N = 4
pixels = ar[::N,::4]  # every 4th pixel in every N-th row
notes = pixels.sum(axis=2) / 9 + 24 # compute notes [0, 52]
print "number of notes to play:", notes.size
音符可以对应不同的音调。我在这里使用:


你可能想看看。问这个问题的人似乎和你在做同一个项目。

你可能想看看。问这个问题的人似乎和你在做同一个项目。

要播放的音符数量不一定是#像素/16。只有当宽度和高度是4的倍数时,您是否使用Python图像库(PIL)?您使用哪个库加载图像?像素数据是如何排列的,你得到的是str还是数组,是rgbrgbrgb。。。还是rrrr…,ggg…,bbb?要播放的音符数量不一定是#像素/16。只有当宽度和高度是4的倍数时,您是否使用Python图像库(PIL)?您使用哪个库加载图像?像素数据是如何排列的,你得到的是str还是数组,是rgbrgbrgb。。。还是rrrr…,ggg…,bbb?我用来测试我的程序的图片是120x145像素,但该程序应该适用于我在文件中选择的任何图像。我用来测试我的程序的图片是120x145像素,但该程序应该适用于我在文件中选择的任何图像。