Python镜像

2024-04-29 02:21:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我在水平和垂直轴上做了一个镜像。现在我要做对角线。

我做了hori和verti width两个for循环,在hori场景中,循环遍历高度中的所有像素和宽度中的一半像素。然后获取像素的颜色,并将相同的颜色设置为另一侧的像素。从getWidth(pic)到中心。

然后我把镜子放在照片中间。对角线怎么做?

编辑:

img_src = makePicture(pickAFile())
W = getWidth(img_src)
H = getHeight(img_src)

for x in range(W):
        for y in range(H):
                p = getPixel(img_src, x, y)
                colorInSrc = getColor( getPixel(img_src, x, y) )
                destPixel = getPixel(img_src, H-y-1, W-x-1)
                setColor(destPixel, colorInSrc)

Tags: insrcimgfor颜色水平range像素
3条回答

这不是一个真正的Python问题,不是吗?

最简单的解决方法是先水平镜像,然后垂直镜像。 另一个方法是将像素行与列进行切换。

或者做你的算法,但是从左上到右下切换像素。。。

使用PIL(Python映像库)这是一个相对简单的任务。但是,请注意,输出图像是正方形的,因此大小与原始图像不同。

代码如下:

from PIL import Image, ImageDraw

# load the image, create the mirrored image, and the result placeholder
img    = Image.open('img.png')
mirror = img.transpose(Image.FLIP_LEFT_RIGHT).transpose(Image.ROTATE_90)
sz     = max(img.size + mirror.size)
result = Image.new(img.mode, (sz,sz))
result.paste(img, (0,0)+img.size)

# now paste the mirrored image, but with a triangular binary mask
mask = Image.new('1', mirror.size)
draw = ImageDraw.Draw(mask)
draw.polygon([0,0,0,sz,sz,sz], outline='white', fill='white')
result.paste(mirror, (0,0)+mirror.size, mask)

# clean up and save the result
del mirror, mask, draw
result.save('result.png')

如果我理解正确的话,你需要的是用对角线“翻转”图像。既然有两个,我想你是指从左下到右上的那个。

要按此对角线翻转,需要在目标列中转换源中的每一行。行的左侧将成为新列的底部。最上面的一行也将成为最右边的一列。你需要在整个图像上逐像素地做这个。还要记住,图像的宽度和高度将被交换。

编辑:一个小例子。假设从5像素宽3像素高的图像开始(5x3)。您将需要创建一个新的空白图像3像素宽和5像素高。

如果从左上角开始用(0,0)进行像素编号,则该像素将在新图像中的(2,4)处结束,像素(1,0)将在(2,3)处结束,依此类推。

如果原始宽度和高度是W和H,则应使用以下内容:

for x in xrange(W):
    for y in xrange(H):
        p = img_src.getpixel(x, y)
        img_dest.setpixel(H-y-1, W-x-1)

这应该有效,但没有经过测试。

相关问题 更多 >