在 OpenCV/Python 中旋转多条线

Rotate a Multiple Lines in OpenCV/Python

我的 opencv 中有很多行,我想旋转它们,但 Opencv 没有形状旋转功能。具有图像旋转功能。

我做了一个长方形,并在上面画了线。然后我用 cv2.getRotationMatrix2D 旋转它。我尝试用 cv2.addWeighted 创建一个蒙版并在图像上添加线条,但它没有正常工作。

我用Canva画了一些例子:

这是我用来画线的代码:

def draw_lines(img, color, cx, cy, deg):

    deg = int(deg)

    for a in range(720, -720, -30):

        img = cv2.line(img, (cx-165, cy+a),  (cx+165, cy+a), color, 1,cv2.LINE_AA)
            
    return img

如何仅使用数学来旋转这些线?

*信息:弯曲线示例(不旋转): 我想旋转它们。

旋转矩阵围绕原点旋转向量 (0, 0)。您始终必须考虑要旋转的矢量在哪个坐标系中。

将您的代码和示例放在一起:

import numpy as np
import cv2
from math import cos, sin


def draw_lines(img, color, cx, cy, deg):
    theta = np.deg2rad(deg)
    rot = np.array([[cos(theta), -sin(theta)], [sin(theta), cos(theta)]])

    c = np.array([cx, cy])

    for a in range(720, -720, -30):
        v1 = np.dot(rot, np.array([-165, a])).astype(int)
        v2 = np.dot(rot, np.array([165, a])).astype(int)

        img = cv2.line(img, c + v1, c + v2, color, 1, cv2.LINE_AA)

    return img


def main():
    img = np.zeros((2000, 2000, 3), np.uint8)  # create empty black image
    draw_lines(img, [255, 255, 255], 1000, 1000, 30)
    cv2.imwrite("out.png", img)


main()