在 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()
我的 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()