پایتون + کلی تاس + آکام

  • شروع کننده موضوع شروع کننده موضوع ememlia
  • تاریخ شروع تاریخ شروع

ememlia

⁦(⊙_◎)⁩
ارسال‌ها
856
امتیاز
19,972
نام مرکز سمپاد
شهید بهشتی
شهر
.
سال فارغ التحصیلی
1397
سلامممم ^^
بازم من
اول اول اول اینو ببینید تا داستان دستتون بیاد:

چ جالب:-":-":-"
منطق قضیه خیلی آسونه
بدیهی؟ است ک تاس ۶ وجه؟ داره
index.png
هرجا قراره خیلی تیره باشه ۶ میزاریم و هرجا قراره خیلی روشن باشه ۱ میزاریم و بقیه هم ب ترتیب این وسطا میچینیم
ولی خب کار سختی بنظر میرسه
فک کن چند هزار تاس رو باید جوری بچینیم ک تصویر واقعی بهمون بده :-"
نکته اش اینه ک خوشبختانه قرار نیست منو شما حساب کتاب کنیم
کامپیوتر قراره بهمون بگه تاس رو تو کدوم جهت و کجا بزاریم
img.jpg
موجودی ک مشاهده میکنید< آکام> نام داره
پسر عموی منه و داوطلب شده ک آزمایشاتم رو روش تست کنم
قراره با تاس پسر عموم رو شبیه سازی کنم
پایتون یه کتابخونه داره ب اسم "PIL" خیلی ساده و سرراست با عکسا کار میکنه
خب لتس استارت >)
1 :{
Python:
from PIL import Image, ImageOps, ImageDraw

img = Image.open("img.jpg")
img = ImageOps.grayscale(img)
img = ImageOps.equalize(img)

img.show()
خب اگه پابتون و PIL و آکام رو با هم داشته باشین و کد رو درست اجرا کنید باید اینو ببینید:
Screenshot from 2020-05-15 20-42-28.png
خب تا الان چیکار کردیم؟
کتابخونه رو خوندیم
عکس رو هم خوندیم
عکس رو سیاه و سفید کردیم
متد equalize رو روی عکس پیاده کردیم (یجورایی رنج رنگ پیکسل ها رو میکشه....کنتراست هم بیشتر میشه گمونم )
}
2:{
حالا باید مشخص کنیم قراره از چندتا تاس استفاده کنیم
باید حساب کنیم قراره هرچنتا پیکسل رو یه تاس بزاریم و...
Python:
dicew = 100
dicesize = int(img.width * 1.0 / dicew)
diceh = int(img.height * 1.0 / img.width *dicew)
}
3:{
حالا باید تصمیم بگیریم هر تاس چ عددی داشته باشه:
Python:
for y in range(0, img.height-dicesize, dicesize):
    for x in range(0, img.width-dicesize, dicesize):
        thisSectorColor = 0
        for dicex in range(0, dicesize):
            for dicey in range(0, dicesize):
                thisColor = img.getpixel((x+dicex, y+dicey))
                thisSectorColor += thisColor
        thisSectorColor /= (dicesize ** 2)
        thisSectorColor = int(thisSectorColor)

        diceNumber = (255-thisSectorColor) * 6 / 255 +1
        print (int(diceNumber), end = " ")
    print("")
}
خب جدن گشنمه و حوصله توضیح بیشتر ندارم .... بیا ران کنیم:
Screenshot from 2020-05-15 21-24-10.png
خب کار کرد =P~=P~=P~:-b:-b:-b<:P<:P
اگه ۱۰ هزار تاس رو طبق اعداد بالا بچینیم تصویر آکام ب دست میاد
اما از کجا معلوم ک دروغ نمیگم؟:^o:^o

خب تستش میکنیم
اول تصویر ۶ جهت تاس رو میخوایم :
من تو ابعاد ۱۵ پیکسل در ۱۵ پیکسل عکس هارو درست کردم
Screenshot from 2020-05-15 21-28-17.pngScreenshot from 2020-05-15 21-28-17.pngScreenshot from 2020-05-15 21-28-17.png
باید یه عکس جدید درست کنیم و توش تاس بچینیم
فقط کد نهایی رو اینجا میزارم:
Python:
from PIL import Image, ImageOps, ImageDraw

dice1 = Image.open('1.png')
dice2 = Image.open('2.png')
dice3 = Image.open('3.png')
dice4 = Image.open('4.png')
dice5 = Image.open('5.png')
dice6 = Image.open('6.png')

Diceh = 15

def DICE(diceNum):
    x = None
    if diceNum == 1:
        x = dice1
    if diceNum == 2:
        x = dice2
    if diceNum == 3:
        x = dice3
    if diceNum == 4:
        x = dice4
    if diceNum == 5:
        x = dice5
    if diceNum == 6 or diceNum == 7:
        x = dice6

    final.paste(x,(xx* Diceh, yy* Diceh))





img = Image.open("img.jpg")
img = ImageOps.grayscale(img)
img = ImageOps.equalize(img)

dicew = 250
dicesize = int(img.width * 1.0 / dicew)
diceh = int(img.height * 1.0 / img.width *dicew)

final = Image.new('RGB',(dicew * Diceh, diceh * Diceh))


nim = Image.new('L', (img.width, img.height), "white")
nimd = ImageDraw.Draw(nim)

yy = 0
for y in range(0, img.height-dicesize, dicesize):
    xx = 0
    for x in range(0, img.width-dicesize, dicesize):
        thisSectorColor = 0
        for dicex in range(0, dicesize):
            for dicey in range(0, dicesize):
                thisColor = img.getpixel((x+dicex, y+dicey))
                thisSectorColor += thisColor
        thisSectorColor /= (dicesize ** 2)
        thisSectorColor = int(thisSectorColor)
        nimd.rectangle([(x,y),(x+dicesize, y+dicesize)], thisSectorColor)

        diceNumber = (255-thisSectorColor) * 6 / 255 +1
        #print (int(diceNumber), end = " ")
        DICE(int(diceNumber))
        xx+=1
    yy+=1
nim.show()
final.save('out.png')

خروجی همچین چیزیه:

out.png
ک اگه بندازه کافی زوم کنید تاس هارو میبینید
out.png
 
بعد از مدت ها یه چیز خیلیی خوب دیدم :O
اینا چطوری به ذهنتون میاد؟؟؟؟؟؟
 
ایده خیلی خوب بود جدا منم لذت بردم :))
 
Back
بالا