我尝试随机旋转一些带有注解的图像,我尝试了解如何在旋转后获得新点位置,我的图像具有不同的形状
我尝试做的例子是:此函数用于根据此答案计算新位置(here)
def new_pixel(x,y,theta,X,Y):
sin = math.sin(theta)
cos = math.cos(theta)
x_new = (x-X/2)*cos + (y-X/2)*sin + X/2
y_new = -(x-X/2)*sin + (y-Y/2)*cos + Y/2
return int(x_new),int(y_new)
打开原始图像代码:
img = cv2.imread('D://ubun/1.jpg')
print(img.shape)
X, Y, c = img.shape
p1 = (124,291)
p2 = (168,291)
p3 = (169,391)
p4 = (125,391)
img1 = img.copy()
cv2.circle(img1, p1, 10, color=(255,0,0), thickness=2)
plt.imshow(img1)
红点就是
循环代码:
rotated = ndimage.rotate(img, 45)
print(rotated.shape)
p11 = new_pixel(p1[0],p1[1],45,X,Y)
p22 = new_pixel(p2[0],p2[1],45,X,Y)
p33 = new_pixel(p3[0],p3[1],45,X,Y)
p44 = new_pixel(p4[0],p4[1],45,X,Y)
cv2.circle(rotated, p11, 10, color=(255,0,0), thickness=2)
plt.imshow(rotated)
旋转后的图像和旋转后看到的点不在正确的位置:
我注意到旋转后图像形状不同,这是否会影响计算?
1条答案
按热度按时间cbjzeqam1#
这个回复真的很晚了,但是即使是我也面临着同样的问题。所以基本上你的代码有两个问题。
x_new =(x-旧_宽度/2)*cos +(y-旧_高度/2)*sin +新_宽度/2
y_new = -(x-旧_宽度/2)*sin +(y-旧_高度/2)*cos +新_高度/2
我知道这篇文章太晚了,但希望这能帮助那些面临同样问题的人。