2017-05-30 5 views
-3

私は少しのコードをに書きました。を試して、Y値ごとに1つの黒い点を持つ画像を作成しますが、Y値ごとに1つ以上作成します。画像 - >the output imagefor weird things python

画像は小さいですが、あなたはY値ごとに複数の黒い点があることを確認することができます。実際のコード:

from PIL import Image 
from random import * 
from math import * 

white = (255,255,255) 
black = (0,0,0) 

width = 50 
height = 10 
num = 0 
def line(num): 
    mylist = [] 
    a = Image.new("RGB", (width, height)) 
    for row in xrange(width): 
     dot = False 
     for col in xrange(height): 
      rand = random() 
      b = float(col)/(width-1) 
      if b > rand and not dot: 
       mylist.append(black) 
       dot = True 
      else: 
       mylist.append(white) 
    a.putdata(mylist) 
    a.save("boop"+str(num)+".png") 

line(num) 

は、通常、それがdotが真になる、黒ドットを付加するので、画素の次の行の前に別のブラックドットが存在することができないとき。なぜこれは機能しないのですか?

EDIT:所望の出力のexemple - >desired output

+0

はStackOverflowのへようこそ。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)がここに適用されます。 MCVEコードを投稿して問題を正確に記述するまでは、効果的にお手伝いすることはできません。 投稿したコードをテキストファイルに貼り付け、説明した問題を再現できるはずです。 – Prune

+0

デバッグトレースの出力はどこですか?それ以外の場合は、戦略的に配置された 'print'文をいくつか挿入し、それらを生成する際にポイントをダンプする必要があります。この素敵な[デバッグ](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)のブログを参照してください。 – Prune

+0

あなたが何を求めているのかははっきりしない。あなたが黒い点を見つけたらあなたの 'for'ループで' continue'を使うでしょうか?乱数の目的は何ですか?あなたのコードは、あなたの判断基準であると私が理解していることの違反を受け入れるように設定されているようです。 – roganjosh

答えて

2

あなたの行は、レンジ幅に設定され、あなたの列が高さ、xrange(height)xrange(width)を変更し、必要に応じてその逆、画像が出力されなければなりません。

現状では、それが探しているべきである50とは反対に、それはドットのための10個の列をチェックしています。

EDIT 3

import numpy as np 

#other declarations as above# 

def line(num): 
    mylist = np.zeros((width, height)) 
    for row in mylist: 
     row[randint(0,9)] = 1 
    npArr = mylist.T 
    a = Image.new("RGB", (width, height)) 
    mylist = [] 
    for idx, val in np.ndenumerate(npArr): 
     if val == 1: 
      mylist.append(black) 
     else: 
      mylist.append(white) 
    a.putdata(mylist) 
    a.save("boop"+str(num)+".png") 

あなたがnumpyのをインストールすることができる場合は、その中にあなたがランダム1(ドット)でカラムを追加することができるので、それは行方向フィルアレイを作成して回転することができます配列を横向きにします。

出力 - >enter image description here

+0

私は順序が、最初のループとすべてのために、私はそれを書いたで遊んでみました(0 Y値が一番上にあるため、私たちの視点から反転します)何か他のものは、私が唯一 'xrange'コールの値を置き換えるために、ループの順序を変更するつもりはない – Tissuebox

+0

問題で悪化させる、最も近い所望の出力を与えるには、他のすべてが同じ滞在する必要があります。 – njoosse

+0

その答えをありがとう、私は実際には、リストが左上から右下に向かって読み込まれ、私が書いたように、Y値(上から下) X軸の右に行く – Tissuebox

0

ので、私は、問題が何であったか、画像の上に上から下へ、右、その後に左が、私の関数が上から追加しようとしていたからputdata(リスト)機能の書き込みを見つけました下から右に向かって左から右に向かって右の出力を作成していませんでした。それを修正するために、リストを白色(幅*高さ)で塗りつぶし、リストの色を[col * width + row]の式で変更します。コード:

width = 50 
height = 10 
num = 0 
mylist = [] 
def line(num): 
    a = Image.new("RGB", (width, height)) 
    for pixel in xrange(width*height): 
     mylist.append(white) 
    for row in xrange(width): 
     dot = False 
     for col in xrange(height): 
      rand1 = random() 
      rand2 = random() 
      b = float(col)/(height-1) 
      if rand1 < b < rand2 and not dot: 
       mylist[col*width+row] = black 
       dot = True 
      if col == height-1 and not dot: 
       rand3 = randint(0, height-1) 
       mylist[rand3*width+row] = black 
    a.putdata(mylist) 
    a.save("boop"+str(num)+".png") 

line(num) 

出力 - >output