3

私はPythonでプログラミングクラスを受講しています。ミラーポイントを定義し、ネストされたforループを使用して一方の側からもう一方の側にピクセルをコピーすることにより、画像のミラーリングに取り組んでいます。たとえば、画像を垂直にミラーリングするには、次のコードを使用します。

def mirrorVertical(source):
 mirrorPoint = getWidth(source) / 2
 width = getWidth(source)
 for y in range(0,getHeight(source)):
   for x in range(0,mirrorPoint):
     leftPixel = getPixel(source,x,y)
     rightPixel = getPixel(source,width - x - 1,y)
     color = getColor(leftPixel)
     setColor(rightPixel,color)

現在、左上が右下に反映されるように、画像を斜めにミラーリングするように求める課題の質問に取り組んでいます。これまでに見つけたすべての例と回答は、正方形の画像でのみ機能します。できれば対角ミラーポイントを定義することにより、これを任意の画像に適用できる必要があります。y = mx + b スタイルの式を使用してミラー ポイントを定義しようとしましたが、Python にそれを線にするように指示する方法がわかりません。正方形の画像に限定されないヘルプをいただければ幸いです。

注: 私はここに新しいので、まだ画像を投稿することはできませんが、斜めのミラー ポイントは左下から右上に向かっています。左上の三角形のイメージは、右下に反映されます。

4

4 に答える 4

0

長方形の対角線ではなく、45度の線に従ってミラーリングしたいと思います。

新しい画像を作成する必要があります。幅は元の高さで、高さは元の幅です。

座標系の原点が左下の場合、元の点 (x, y) を新しい画像の (y, x) 位置にコピーします。それが別のコーナーである場合は、もう少し考えなければなりません ;)

于 2013-02-08T14:28:54.487 に答える
0

これは、長方形の画像で機能する比較的簡単なソリューションです。このコード例は、sourceImage が Python Pillow ライブラリからのものであることを前提としていますが、概念は普遍的です。

## WORKS WITH RECTANGLES! 
def mirrorDiagonal(sourceImage):
    copyImage = sourceImage
    width = copyImage.width
    height = copyImage.height
    for y in range(0,height):
        ##The for loop for X is bounded by a slope of width to height.
        mirrorPoint = int((width/height)*y)
        for x in range(0, mirrorPoint):
            leftPixel = copyImage.getpixel((x,y))
            percentageX = float(x / width)
            percentageY = float(y / height)
            rightPixel = sourceImage.getpixel((width*percentageY, height*percentageX))
            copyImage.putpixel((x,y),rightPixel)
    return copyImage

基本的に、x座標とy座標を交換するには、他の人が言及したことを行います。ただし、長方形の場合、座標を交換するだけでは、角から角まで行かない対角線が得られます。たとえば、1000 x 2000 ピクセルの画像の場合、角 (1000, 0) を交換すると (0, 1000) になり、画像の半分になります。

あなたが実際に望んでいるのは、(0, 2000) の左下隅が (1000, 0) の右上隅に反映されることです。これを解決するには、幅と高さのパーセンテージを操作する必要があります。

于 2021-05-10T10:36:59.390 に答える