如何更改每个像素
How do I change each pixel
我是 Python 的新手,我仍然不知道 Qimage 的像素到底是什么 returns(它似乎是 rgb 或 rgba 的 tupel - 缺少类型声明无济于事)
我想抓住每一个像素并改变它。
newqim = QImage(imWidth, imHeight, QImage.Format_ARGB32)
for xstep in range(0, imWidth - 1):
for ystep in range(0, imHeight - 1):
pixelValueTuple = im.getpixel((xstep, ystep))
pixelR = pixelValueTuple[0]
pixelG = pixelValueTuple[1]
pixelB = pixelValueTuple[2]
copiedValue = qRgb(pixelR, pixelG, pixelB)
newqim.setPixel(xstep, ystep, copiedValue)
上面是提供的代码,我想我然后迭代那个 newqim,但我无法理解我将如何在 Python 中做到这一点。
for xstep in range(0, imWidth-1):
for ystep in range(0, imHeight -1):
我不确定我是否理解您想要什么,但由于您是 Python 的新手,这里有一些提示...
开箱
此代码:
pixelR = pixelR[0]
pixelG = pixelValueTuple[1]
pixelB = pixelValueTuple[2]
等同于:
pixelR, pixelG, pixelB = pixelValueTuple[:3]
如果你确定len(pixelValueTuple) == 3
,那么就是:
pixelR, pixelG, pixelB = pixelValueTuple
PEP-8
有点吹毛求疵,但是 python 伙计们往往对语法有点不满意。请阅读 PEP-8。从现在开始,我将根据它命名变量(camelCase
例如变量只会伤害我的眼睛 %-)。
范围
您可能需要 range(width)
而不是 range(0, width-1)
。
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(0, 10 - 1)
[0, 1, 2, 3, 4, 5, 6, 7, 8]
现在回到你的问题。
width, height = 300, 300
im = QImage(width, height, QImage.Format_ARGB32)
for x in range(im.width()):
for y in range(im.height()):
r, g, b, a = QColor(im.pixel(x ,y)).getRgb()
# ... do something to r, g, b, a ...
im.setPixel(x, y, QColor(r, g, b, a).rgb())
例子
width, height = 100, 100
im = QImage(width, height, QImage.Format_ARGB32)
for x in range(im.width()):
for y in range(im.height()):
im.setPixel(x, y, QColor(255, x * 2.56, y * 2.56, 255).rgb())
im.save('sample.png')
结果:
我是 Python 的新手,我仍然不知道 Qimage 的像素到底是什么 returns(它似乎是 rgb 或 rgba 的 tupel - 缺少类型声明无济于事) 我想抓住每一个像素并改变它。
newqim = QImage(imWidth, imHeight, QImage.Format_ARGB32)
for xstep in range(0, imWidth - 1):
for ystep in range(0, imHeight - 1):
pixelValueTuple = im.getpixel((xstep, ystep))
pixelR = pixelValueTuple[0]
pixelG = pixelValueTuple[1]
pixelB = pixelValueTuple[2]
copiedValue = qRgb(pixelR, pixelG, pixelB)
newqim.setPixel(xstep, ystep, copiedValue)
上面是提供的代码,我想我然后迭代那个 newqim,但我无法理解我将如何在 Python 中做到这一点。
for xstep in range(0, imWidth-1):
for ystep in range(0, imHeight -1):
我不确定我是否理解您想要什么,但由于您是 Python 的新手,这里有一些提示...
开箱
此代码:
pixelR = pixelR[0]
pixelG = pixelValueTuple[1]
pixelB = pixelValueTuple[2]
等同于:
pixelR, pixelG, pixelB = pixelValueTuple[:3]
如果你确定len(pixelValueTuple) == 3
,那么就是:
pixelR, pixelG, pixelB = pixelValueTuple
PEP-8
有点吹毛求疵,但是 python 伙计们往往对语法有点不满意。请阅读 PEP-8。从现在开始,我将根据它命名变量(camelCase
例如变量只会伤害我的眼睛 %-)。
范围
您可能需要 range(width)
而不是 range(0, width-1)
。
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(0, 10 - 1)
[0, 1, 2, 3, 4, 5, 6, 7, 8]
现在回到你的问题。
width, height = 300, 300
im = QImage(width, height, QImage.Format_ARGB32)
for x in range(im.width()):
for y in range(im.height()):
r, g, b, a = QColor(im.pixel(x ,y)).getRgb()
# ... do something to r, g, b, a ...
im.setPixel(x, y, QColor(r, g, b, a).rgb())
例子
width, height = 100, 100
im = QImage(width, height, QImage.Format_ARGB32)
for x in range(im.width()):
for y in range(im.height()):
im.setPixel(x, y, QColor(255, x * 2.56, y * 2.56, 255).rgb())
im.save('sample.png')
结果: