Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 图像到二维阵列的转换时间过长_Python - Fatal编程技术网

Python 图像到二维阵列的转换时间过长

Python 图像到二维阵列的转换时间过长,python,Python,我有一个剧本 将图像分割为块,然后将每个块的像素颜色值相加 将该值除以块中的像素数 然后检查块的平均值是否大于或小于127,并返回1或0(如果是黑色或白色);将该0或1指定给二维数组 但是这个脚本非常慢。也许你们中的一些人会有更好的主意。这是我的密码 #gridHeight and gridWidth is how many blocks vertically and horizontally are there. #bialeMin is block's width and height (

我有一个剧本

  • 将图像分割为块,然后将每个块的像素颜色值相加
  • 将该值除以块中的像素数
  • 然后检查块的平均值是否大于或小于127,并返回1或0(如果是黑色或白色);将该0或1指定给二维数组 但是这个脚本非常慢。也许你们中的一些人会有更好的主意。这是我的密码

    #gridHeight and gridWidth is how many blocks vertically and horizontally are there. 
    #bialeMin is block's width and height (blocks are always squares)
    
        for y in range (0, gridHeight):
        for x in range (0, gridWidth):
            i=0
            pixel=0
            for v in range (0, bialeMin):
                for w in range (0, bialeMin):
                    pixel=pixel+im.getpixel((((x*bialeMin)+w),((y*bialeMin)+v)))
                    i=i+1
            if (pixel/i)<127:
                pixelavg[y][x]=1
            elif (pixel/i)>127:
                pixelavg[y][x]=0
    
    #gridHeight和gridWidth是垂直和水平方向上有多少块。
    #bialeMin是块的宽度和高度(块总是正方形)
    对于范围内的y(0,网格高度):
    对于范围内的x(0,网格宽度):
    i=0
    像素=0
    对于范围(0,二元数)内的v:
    对于范围内的w(0,二元数):
    pixel=pixel+im.getpixel(((x*bialeMin)+w),((y*bialeMin)+v)))
    i=i+1
    如果(像素/i)127:
    像素平均值[y][x]=0
    
    好的,多亏了@Roland Deschain,我在处理时间上成功地与huuuuge benefit合作

    im2=np.array(im)
    for y in range (0, gridHeight):
    for x in range (0, gridWidth):
        i=0
        im3=im2[(y*bialeMin):(y*bialeMin+bialeMin),(x*bialeMin):(x*bialeMin+bialeMin)]
        im4=np.sum(im3) / (bialeMin*bialeMin)
        if im4<127:
            pixelavg[y][x]=1
        elif im4>127:
            pixelavg[y][x]=0
    
    im2=np.array(im)
    对于范围内的y(0,网格高度):
    对于范围内的x(0,网格宽度):
    i=0
    im3=im2[(y*bialeMin):(y*bialeMin+bialeMin),(x*bialeMin:(x*bialeMin+bialeMin)]
    im4=np.sum(im3)/(bialeMin*bialeMin)
    如果im4127:
    像素平均值[y][x]=0
    
    您可以使用其他功能吗?这类似于将内核应用于图像,也许这会有所帮助。()一种方法是调查一下。您可以直接使用子阵列提取块,只需在这些子阵列上调用例如
    numpy.sum()
    ,而不需要任何循环。刚开始时有点棘手,但numpy对数组操作进行了高度优化(图像基本上只是一个2D数组),因此比自编循环快得多。@RolandDeschain这似乎是一个解决方案,但我不知道如何将图像转换为数组。这样做:im2=np.array(im)只会在任何地方给我零。很抱歉,回复太晚了,但看起来你已经解决了:)