【问题标题】:rotate an image based on the two coordinates根据两个坐标旋转图像
【发布时间】:2020-05-27 12:49:04
【问题描述】:

我有很多图像,其中包含两个点,一个在顶部,另一个在底部。以及我也将坐标存储在excel文件中。我想将图像旋转为 90 度。下面是包含两个坐标的图像。

红色:用坐标表示实际图像,角度为85度(大约),所以我想将图像旋转90度,如图中黄色所示。

有人可以帮我解决要使用的 api 或函数吗? (我正在使用 Python 进行编码)

【问题讨论】:

  • 如果你有两个点,那么你可以计算距离dxdy,你可以用它来计算(我记得)tan(alpha) = dy/dx,然后你可以计算alpha = atan(dy/dx)。您可以使用标准模块math 计算alpha。当您拥有alpha 时,您可以使用PIL/pillowcv2 来旋转它。
  • @furas 你能用一个例子解释一下吗?
  • 只是好奇@KrupaliMistry 这张图片是什么?
  • @Ajinkya 这是一张螃蟹图片

标签: python image rotation


【解决方案1】:

这是三角形角度的基本数学。

如果你有两个点(x1,y1)(x2, y2),那么你可以计算dx = x2-x1dy = y2-y1,然后你可以计算tangens_alpha = dy/dxalpha = arcus_tangens(tangens_alpha),你有angle你可以使用计算旋转 - 90-alpha


在 Python 中将如下所示。我从你的图像中获得了分数。

因为图像在左上角有(0,0),而不是像math那样在左下角,所以我使用dy = -(y2 - y1)来翻转它

import math

x1 = 295
y1 = 605

x2 = 330
y2 = 100

dx = x2 - x1
dy = -(y2 - y1)

alpha = math.degrees(math.atan2(dy, dx))
rotation = 90-alpha

print(alpha, rotation)

现在您可以使用PIL/pillowcv2+imutils 来旋转它

import math
import cv2
import imutils

x1 = 295
y1 = 605

x2 = 330
y2 = 100

dx = x2 - x1
dy = -(y2 - y1)

alpha = math.degrees(math.atan2(dy, dx))
rotation = 90-alpha
print(alpha, rotation)

img = cv2.imread('image.jpg')

img_2 = imutils.rotate(img, rotation) 
cv2.imwrite('rotate.jpg', img_2)

img_3 = imutils.rotate_bound(img, -rotation)
cv2.imwrite('rotate_bound.jpg', img_3)

cv2.imshow('rotate', img_2)
cv2.imshow('rotate_bound', img_3)

cv2.waitKey(0)

旋转.jpg

rotate_bound.jpg

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 2012-08-06
    • 1970-01-01
    相关资源
    最近更新 更多