Python 在图像上任意方向(例如:水平、垂直、对角线(+;45,-45))随机写入文本

Python 在图像上任意方向(例如:水平、垂直、对角线(+;45,-45))随机写入文本,python,numpy,opencv,Python,Numpy,Opencv,我想在图像上任意方向写文本。我得到了两个轴I-e x轴,y轴,但是当以对角线方向(+45,-45)写文本时该怎么办?位置应随机选取 from PIL import Image, ImageFont, ImageDraw import numpy as np import os # some lines of the code for img_name, label in zip(images_name_list,names_list): im = Image.open(src_i

我想在图像上任意方向写文本。我得到了两个轴I-e x轴,y轴,但是当以对角线方向(+45,-45)写文本时该怎么办?位置应随机选取

from PIL import Image, ImageFont, ImageDraw
import numpy as np
import os

#  some lines of the code 
for img_name, label in zip(images_name_list,names_list): 
    im = Image.open(src_img_path+img_name)
    arial = ImageFont.truetype(font=font_name, size=font_size)
    d = ImageDraw.Draw(im)

    y_cordinate ,x_cordinate, z_cordinate = np.random.randint(im.height/2) 
    ,np.random.randint(im.width/2), np.random.randint(im.diagonal/2)

    location = (x_cordinate,y_cordinate, z_cordinate)

 text_color = (000, 000, 000)
 d.text(location,label, font=arial, fill=text_color)

 im.save(dist_img_path+img_name)
y_cordinate,x_cordinate,z_cordinate=np.random.randint(im.height/2),np.random.randint(im.width/2),np.random.randint(im.diagonal/2)


AttributeError:'JpegImageFile'对象没有“对角线”属性。

下面是上述思想的opencv实现。您可以使用此代码作为起点。其基本思想是将文本添加到空图像中,以所需角度旋转文本,最后将其添加到原始图像中

代码:

输出:

图1:文本旋转-45度

图2:文本旋转45度


我建议您使用Python Wand来完成此操作。它基于ImageMagick,它有一个绘图功能,可以在任何角度书写文本。ImageMagick还有一个随机函数作为fx方法的一部分。见和。或者,在代码中,只需将文本保存为具有透明背景的图像,然后以您希望首先应用的任何旋转方式将文本图像合成到背景图像上。对象
im
没有
diagonal
属性。你认为这条对角线是什么?它与宽度和高度的关系如何?评论不用于扩展讨论;这段对话已经结束。
img = cv2.imread('bird.jpeg')

def rotate(src, angle):
    rows,cols = src.shape[:2]
    M = cv2.getRotationMatrix2D((cols/2,rows/2), angle, 1)
    dst = cv2.warpAffine(src, M, (cols,rows))
    return dst

x = np.zeros((img.shape), dtype=np.uint8)
cv2.putText(x, 'Stackoverflow Sample Image', (50, 200), cv2.FONT_HERSHEY_PLAIN, 1, (0,0,255), 2)
x = rotate(x, 45)
res = cv2.bitwise_or(img, x)