gpt4 book ai didi

python - 绘制具有特定位置、大小和旋转的图像

转载 作者:行者123 更新时间:2023-12-02 17:09:25 24 4
gpt4 key购买 nike

有没有办法快速绘制具有特定位置、大小和旋转的图像?假设我有一个框架,我想在它上面绘制一个带有某些变换的图像,我该怎么做呢?图像将有一个 alpha channel ,所以我不能直接复制它:

image = # a loaded image
x, y, w, h = # some values

# resize
cv2.resize(image, (w, h))
# rotation
# ???
frame[y:y+h,x:x+w] = image

这也不适用于轮换。

我可以从 OpenCV 中使用任何快速的方法吗?如果没有,我应该如何实现?

最佳答案

由于似乎没有快速的方法来做到这一点,我创建了这个函数来实现这个效果:

import numpy as np
import imutils
import cv2

def draw(frame, image, location, dimension, rotation=0):
w, h = dimension # dimension
x, y = location # center

fh, fw = frame.shape[:2] # frame size

image = cv2.resize(image, (w, h)) # resize image
image = imutils.rotate_bound(image, rotation) # rotate image

nh, nw = image.shape[:2]
tlx, tly = x - nw / 2, y - nh / 2 # top left

if tlx < 0:
# x left out of bound
offset = (0 - tlx)
nw -= offset
tlx = 0
image = image[:,offset:,:]
if tlx + nw >= fw:
# x right out of bound
offset = (tlx + nw - fw)
nw -= offset
image = image[:,:nw,:]
if tly < 0:
# y left out of bound
offset = (0 - tly)
nh -= offset
tly = 0
image = image[offset:,:,:]
if tly + nh >= fh:
# y right out of bound
offset = (tly + nh - fh)
nh -= offset
image = image[:nh,:,:]

overlay_img = image[:,:,:3] # RGB channel
overlay_alpha = cv2.split(image)[3] # alpha channel

res, overlay_is_alpha = cv2.threshold(overlay_alpha, 10, 1, cv2.THRESH_BINARY_INV) # 1 if alpha, 0 if not
res, overlay_is_not_alpha = cv2.threshold(overlay_alpha, 10, 1, cv2.THRESH_BINARY) # 0 if alpha, 1 if not
overlay_is_alpha = np.repeat(overlay_is_alpha, 3).reshape((nh,nw,3)) # expand to all 4 channels
overlay_is_not_alpha = np.repeat(overlay_is_not_alpha, 3).reshape((nh,nw,3))

overlay_img *= overlay_is_not_alpha # mask out alpha pixels
frame[tly:tly+nh, tlx:tlx+nw] *= overlay_is_alpha # mask out non alpha pixels

frame[tly:tly+nh, tlx:tlx+nw] += overlay_img # combine
draw(
bg, # background image in BGR
image, # image to be drawn in BGRA
location, # center (x,y)
dimension, # size (w,h)
degree # rotation (deg)
)

关于python - 绘制具有特定位置、大小和旋转的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46614223/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com