【问题标题】:Is there a module in python that can draw lines on an original image?python中是否有可以在原始图像上画线的模块?
【发布时间】:2020-11-09 13:58:55
【问题描述】:

如标题所述,我希望在附录中可视化我的结果。

红线是由给定特定角度的程序绘制的。 python中是否有提供此类功能的模块?我该怎么做?

【问题讨论】:

标签: python matplotlib data-visualization visualization


【解决方案1】:

作为评论,链接的 awnser Plot over an image background in python 展示了如何使用 matplotlib 在现有图像上绘制简单的几何图形。如果你想要更复杂的东西(也可能随着时间的推移而改变)matplotlib 可以工作,但可能不会按你的意愿执行,并且包含很多你想要覆盖的所有元素的代码。

相反,您应该将叠加层作为图像提供并使用opencv 旋转它,并且叠加层是矩阵。

我给你举个简单的例子:

这里有背景图片:

我们要覆盖以下圆圈:

还有这个十字,但是旋转了 36 度:

以下代码将提供想要的结果:

import cv2
import numpy as np

def rotate_image(image, angle):
    image_center = tuple(np.array(image.shape[1::-1]) / 2)
    rot_mat = cv2.getRotationMatrix2D(image_center, angle, 1.0)
    result = cv2.warpAffine(image, rot_mat, image.shape[1::-1], flags=cv2.INTER_LINEAR)
    return result

def overlay_images(img1, img2):
    if img1.shape[2] != 4 or img2.shape[2] != 4:
        print('png needs Alphachannel!')
        return 
    alpha_img1 = img1[:,:,3] / 255.0
    alpha_img2 = img2[:,:,3] / 255.0

    for color in range(0, 3):
        img1[:,:,color] = alpha_img2 * img2[:,:,color] + \
            alpha_img1 * img1[:,:,color] * (1 - alpha_img2)

        img1[:,:,3] = (1 - (1 - alpha_img2) * (1 - alpha_img1)) * 255
    return img1

img_bg = cv2.imread('img1.png',cv2.IMREAD_UNCHANGED)
img_circle = cv2.imread('img2.png',cv2.IMREAD_UNCHANGED)
img_cross = cv2.imread('img3.png',cv2.IMREAD_UNCHANGED)

img_rotate_36 = rotate_image(img_cross, 36)

img1_2 = overlay_images(img_bg, img_circle)
img1_2_3 = overlay_images(img1_2, img_rotate_36)

cv2.imwrite('img_rotated.png', img1_2_3)

cv2.imshow('Rotatet Image', img1_2_3)
cv2.waitKey(0)
cv2.destroyAllWindows()

有趣的部分是旋转和叠加。我将这种情况用于覆盖此解决方案https://stackoverflow.com/a/59211216/10985257,因为cv2.addWeighted 函数似乎与alpha 通道有问题。使用的算法称为阿尔法合成。旋转基于https://stackoverflow.com/a/9042907/10985257,是基于旋转矩阵的简单仿射变换。 我将这两个应用程序都放在了上面代码中的一个函数中。

【讨论】:

  • 非常感谢!我已经使用 matplotlib 完成了这项工作,但这个答案打开了一个新的视角。
猜你喜欢
  • 2011-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-12
  • 1970-01-01
相关资源
最近更新 更多