python - 我尝试使用函数旋转矩形,但框位置不正确
问题描述
代码确实将点旋转为我输入的角度,但是框的输出排列不正确..请检查我的代码吹了..我希望每个框都以我输入的角度旋转,但同时我希望它在正确的行和列
import cv2
import numpy as np
import math
def rotate( points, angle):
ANGLE = np.deg2rad(angle)
ANGLE = np.deg2rad(angle)
c_x, c_y = np.mean(points, axis=0)
return np.array(
[
[
c_x + math.cos(ANGLE) * (pxl - c_x) - math.sin(ANGLE) * (py - c_x),
c_y + math.sin(ANGLE) * (pxl - c_y) + math.cos(ANGLE) * (py - c_y)
]
for pxl, py in points
]
).astype(int)
imgc = np.zeros((500, 500, 3), np.uint8)
box = 0
box2 = 0
for i in range(1,10,1):
box2 = box2 + 25
box = 0
for x in range(1, 10, 1):
p0 = (box, box2)
p1 = (0 + box, box2 + 20)
p2 = (20 + box, box2 + 20)
p3 = (box + 20, box2)
box = box + 25
p0, p1, p2, p3 = rotate((p0, p1, p2, p3), 45)
pp = np.array([p0, p1, p2, p3])
cv2.drawContours(imgc, [pp], 0, (255, 255, 255), -1, cv2.LINE_AA)
cv2.imshow("image",imgc)
cv2.waitKey()
解决方案
你以错误的方式移动到中心。
c_x
首先,您从px
和中减去py
。在第二个中,您从和中
减去。c_y
px
py
... + ... * (pxl - c_x) - ... * (py - c_x), # only `c_x`
... + ... * (pxl - c_y) - ... * (py - c_y), # only `c_y`
c_x
但是你应该总是只减去px
而不是py
。
你应该c_y
总是只减去py
但不减去px
。
... + ... * (px - c_x) - ... * (py - c_y)
... + ... * (px - c_x) - ... * (py - c_y)
def rotate(points, angle):
ANGLE = np.deg2rad(angle)
SIN = math.sin(ANGLE)
COS = math.cos(ANGLE)
c_x, c_y = np.mean(points, axis=0)
return np.array(
[
[
c_x + COS * (px - c_x) - SIN * (py - c_y),
c_y + SIN * (px - c_x) + COS * (py - c_y),
]
for px, py in points
]
).astype(int)
旋转前:
旋转后:
推荐阅读
- java - 更改 dataTable 选择 JSF 2.2/ Primefaces 上的 inputText
- angular - Angular 6中的过期时间倒计时
- certificate - 如何从 PKCS12 密钥库更改密钥密码
- python - 仅使用 predict() 或 predict_on_batch() 预测批次中的单个时间序列样本
- flutter - 带有 ExpansionTile 的 ReorderableListView
- java - 如何获得打印出对象地址和自定义 toString 的能力
- android - Flutter SQFlite 一对多关系设置
- java - 是否可以仅针对特定口味包含和初始化 HockeyApp SDK?
- c# - 访问asp dot net core应用后端数据库的最佳实践
- python - TypeError:'dict'和'dict'的实例之间不支持'>'