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

  • شروع کننده موضوع
  • مدیر
  • #1

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:-bP:>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
 

reyna

MelloW
ارسال‌ها
370
امتیاز
6,389
نام مرکز سمپاد
فرزانگان
شهر
مشهد
سال فارغ التحصیلی
1400
دانشگاه
پردیس هاشمی‌ نژاد مشهد
رشته دانشگاه
آموزش ریاضی
بعد از مدت ها یه چیز خیلیی خوب دیدم :O
اینا چطوری به ذهنتون میاد؟؟؟؟؟؟
 

mahta.e

کاربر فوق‌حرفه‌ای
ارسال‌ها
827
امتیاز
8,284
نام مرکز سمپاد
فرزانگان
شهر
تهران
سال فارغ التحصیلی
1399
دانشگاه
امیرکبیر
تلگرام
اینستاگرام
ایده خیلی خوب بود جدا منم لذت بردم :))
 
بالا