python - 枕头图像类型错误: an integer is required (got type tuple)

标签 python image python-3.x python-imaging-library

我有点不明白为什么会发生这种情况,任何帮助将不胜感激。所以我试图获取图像的中值并从中创建一个新图像,但是当尝试使 newpix 接受我的红绿和蓝色中值像素的值时出现错误:

类型错误:需要一个整数(获取类型元组)

发生了

from PIL import Image, ImageChops,ImageDraw,ImageFilter
import math
import glob
import os.path
from os import  listdir;
import numpy


image_list = []

redPixels = []
greenPixels = []
bluePixels = []

for filename in glob.glob(r"C:\Users\Elias\Desktop\Proj1\images\*.png"):
    im = Image.open(filename)
    image_list.append(im)
im = Image.open(open(r"C:\Users\Elias\Desktop\Proj1\images\1.png",'rb'))
width, height = im.size
print(height)
print (width)

result = Image.new('RGB', (width,height))
newpix = result.load()
for x in range (width):
    for y in range (height):
        for z in (image_list):
            red  = z.getpixel((x,y))
            blue = z.getpixel((x,y))
            green = z.getpixel((x,y))

            redPixels.append(red)
            greenPixels.append(green)
            bluePixels.append(blue)
        red = sorted(redPixels)
        blue = sorted(bluePixels)
        green = sorted(greenPixels)

        mid = int( (len(image_list)+1)/2)-1

        newRed = redPixels[mid]
        newBlue = bluePixels[mid]
        newGreen = greenPixels[mid]
        newpix[x,y] = (newRed,newGreen,newBlue)

result.save("Stacked.png")

最佳答案

问题出在线路上

        red  = z.getpixel((x,y))
        blue = z.getpixel((x,y))
        green = z.getpixel((x,y))

        redPixels.append(red)
        greenPixels.append(green)
        bluePixels.append(blue)

red = z.getpixel((x,y)) 将获取 x,y 位置的所有 R,G,B 数据,因此它将是类似 (255,255,255) 的元组。因此,像下面这样对代码进行更改即可使其工作:

from PIL import Image, ImageChops,ImageDraw,ImageFilter
import math
import glob
import os.path
from os import  listdir;
import numpy


image_list = []

redPixels = []
greenPixels = []
bluePixels = []

for filename in glob.glob(r"C:\Users\Elias\Desktop\Proj1\images\*.png"):
    im = Image.open(filename)
    image_list.append(im)
im = Image.open(open(r"C:\Users\Elias\Desktop\Proj1\images\1.png",'rb'))
width, height = im.size
print(height)
print (width)

result = Image.new('RGB', (width,height))
newpix = result.load()
for x in range (width):
    for y in range (height):
        for z in (image_list):
            rgb  = z.getpixel((x,y))
            redPixels.append(rgb[0])
            greenPixels.append(rgb[1])
            bluePixels.append(rgb[2])
        red = sorted(redPixels)
        blue = sorted(bluePixels)
        green = sorted(greenPixels)

        mid = int( (len(image_list)+1)/2)-1
        newRed = redPixels[mid]
        newBlue = bluePixels[mid]
        newGreen = greenPixels[mid]

        newpix[x,y] = (newRed,newGreen,newBlue)

result.save("Stacked.png")

关于python - 枕头图像类型错误: an integer is required (got type tuple),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39652480/

相关文章:

image - 如何使用 opencv python 库从内存缓冲区 (StringIO) 或 url 中读取图像

python - 从列表列表中的对添加项目

python - 如何识别在 python 中从 set() 中删除的元素?

python - 什么时候应该直接调用 __method__ ?

Python - 覆盖多个url的网页抓取数据表

python - Jemdoc安装

python - 通过任意因子重新采样 Pandas 数据框

java - 以编程方式设置 ImageView 资源不起作用

html - 使用 srcset 和 sizes 对响应式图像感到完全迷失

javascript - Python Selenium WebDriver JavaScript 表迭代