Как случайным образом обрезать прямоугольник (определенная область и определенная вероятность) с изображения - PullRequest
0 голосов
/ 19 сентября 2018

Это мой теперь код (он может обрезать изображение до 25 частей jpg из одного изображения)

# -*- coding:utf-8 -*-
from PIL import Image

def cut(id,vx,vy):
    # 打開圖片(open image)
    name1 = "C:\\Users\\admin\\Desktop\\normal_random_crop\\test.png"
    name2 = "C:\\Users\\admin\\Desktop\\normal_random_crop\\test_" + id + "_crop.jpg"
    im =Image.open(name1)
    #偏移量(offset)
    dx = 100
    dy = 100
    n = 1
    #左上角切割(Left Top Poit)
    x1 = 0
    y1 = 0
    x2 = vx
    y2 = vy
    #縱向(Vertical)
    while x2 <= 512:
        #橫向切(Horizontal)
        while y2 <= 512:
            name3 = name2 + str(n) + ".jpg"
            im2 = im.crop((y1, x1, y2, x2))
            im2.save(name3)
            y1 = y1 + dy
            y2 = y1 + vy
            n = n + 1
        x1 = x1 + dx
        x2 = x1 + vx
        y1 = 0
        y2 = vy
    return n-1

if __name__=="__main__":
    id = "1"
    #切割圖片的面積 vx,vy (Crop Area)
    res = cut(id,100,100)
    print(res)

Я надеюсь создать количество случайных урожаев и конкретную вероятность для каждой области, например: случайный урожай 100кусок (из 512x512 изображений) всего 104%

(

===== 1% + 2% + 1% =====

1% + 10% + 10% + 10% + 1% +

1% + 10% + 10% + 10% + 1% +

1% + 10% + 10% + 10% +1% +

===== 1% + 2% + 1% =====

)

удаление желтой области (не нужно)

enter image description here

1 Ответ

0 голосов
/ 19 сентября 2018

Прежде всего, общая вероятность не может быть более 100% (по крайней мере, в этой вселенной).Предполагая, что это 100%, вы можете представить изображение в виде одномерного массива, а затем сделать взвешенный случайный выбор.

Так что если вы нацеливаетесь на 25 частей, 5x5, с вероятностями

0 1  2  1  0
1 9  10 9  1
1 10 10 10 1
1 9  10 9  1
0 1  2  1  0

тогда это становится простым списком вероятностей:

[0, 1,  2,  1,  0, 1, 9,  10, 9, ... # 25 elements total]

Затем вы можете сделать взвешенный случайный выбор, выбрав способ, например, здесь: Взвешенная версия random.choice

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...