如何将物体随机放置在不同角度和不同位置 python

How to place object randomly on Different angle and different position python

我想做一个生成数据集的函数,对象将以不同的角度、不同的大小放置在黑色图像上的不同位置,并在图像中随机放置最多 20 次。并在文本文件中保存 x、y 和角度位置。

下图是五个不同位置和角度的物体。

import numpy as np
import cv2
patch=cv2.imread('imagersult.png')
img = np.zeros((2048, 2048, 1), dtype = "uint8")

以下是使用 scipy.ndimage 模块轮换补丁的方法:

import numpy as np
import cv2
from random import randrange
from scipy import ndimage

def patch_img(img, patch, amt=5):
    h, w, _ = img.shape
    for _ in range(amt):
        p = ndimage.rotate(patch, randrange(360))
        p_h, p_w, _ = p.shape
        x = randrange(w - p_w)
        y = randrange(h - p_h)
        seg = img[y: y + p_h, x: x + p_w]
        seg[:] = cv2.bitwise_xor(seg, p)

patch = cv2.imread('imagersult.png')

img = np.zeros((2048, 2048, 3), dtype="uint8")
patch_img(img, patch)

cv2.imshow("Image", img)
cv2.waitKey(0)

多次运行的输出:

对于灰度和色块大小的变化:

import numpy as np
import cv2
from random import randrange, uniform
from scipy import ndimage

def patch_img(img, patch, amt=5):
    h, w = img.shape
    min_scale = 0.5
    max_scale = 2
    for _ in range(amt):
        patch_h, patch_w = patch.shape
        scale = uniform(min_scale, max_scale)
        p = ndimage.rotate(cv2.resize(patch, (int(patch_w * scale), int(patch_h * scale))), randrange(360))
        p_h, p_w = p.shape
        x = randrange(w - p_w)
        y = randrange(h - p_h)
        seg = img[y: y + p_h, x: x + p_w]
        seg[:] = cv2.bitwise_xor(seg, p)

patch = cv2.imread('imagersult.png', 0)

img = np.zeros((2048, 2048), dtype="uint8")
patch_img(img, patch)

cv2.imshow("Image", img)
cv2.imwrite("result.png", img)
cv2.waitKey(0)

示例输出: