Как я могу случайно добавить 20 изображений (10x10) в пустое фоновое изображение (200x200) в python? - PullRequest
0 голосов
/ 08 апреля 2019

Я хочу, чтобы 10 маленьких изображений были помещены в этот круг

Я работаю над небольшим проектом, чтобы случайно разместить или поместить несколько изображений размером (10 x 10 ч)в другом изображении, которое будет использоваться в качестве фона размером (200 х 200 ч) в Python.Маленькие изображения должны быть размещены в случайном месте на фоновом изображении.

У меня есть 20 небольших изображений размером (10x10) и одно пустое изображение размером (200x200).Я хочу поместить свои 20 маленьких изображений в пустое фоновое изображение в случайном месте на заднем плане.

Есть ли способ сделать это в Python?

Код

# Depencies importation
import cv2

# Saving directory
saving_dir = "../Saved_Images/"

# Read the background image
bgimg = cv2.imread("../Images/background.jpg")

# Resizing the bacground image
bgimg_resized = cv2.resize(bgimg, (2050,2050))

# Read the image that will be put in the background image (exemple of 1)
small_img = cv2.imread("../Images/small.jpg")

# Convert the resized background image to gray
bgimg_gray = cv2.cvtColor(bgimg, cv2.COLOR_BGR2GRAY) 
# Convert the grayscale image to a binary image
ret, thresh = cv2.threshold(bgimg_gray,127,255,0)
# Determine the moments of the binary image
M = cv2.moments(thresh)
# calculate x,y coordinate of center
cX = int(M["m10"] / M["m00"])
cY = int(M["m01"] / M["m00"])

# drawing the circle in the background image
circle = cv2.circle(bgimg, (cX, cY), 930, (0,0,255), 9)

print(circle)

# Saving the new image
cv2.imwrite(saving_dir+"bgimg"+".jpg", bgimg)

cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.resizeWindow("Test", 1000, 1200)
# Showing the images
cv2.imshow("image", bgimg)
# Waiting for any key to stop the program execution
cv2.waitKey(0)

приведенный выше код для одного изображения, я хочу сделать это для 20 и поместить их в случайном месте

1 Ответ

0 голосов
/ 09 апреля 2019

Предполагается, что у вас есть , что фоновое изображение background.jpg (уменьшено до 200x200 px) и 10 изображений: image01.png, image02.png ... image10.png (10x10 px). Тогда:

import glob
import random
from PIL import Image


img_bg = Image.open('circle.jpg')
width, height = img_bg.size
images = glob.glob('*.png')
for img in images:
    img = Image.open(img)
    x = random.randint(40, width-40)
    y = random.randint(40, height-40)
    img_bg.paste(img, (x, y, x+10, y+10))
img_bg.save('result.png', 'PNG')

Выходное изображение:

enter image description here

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