gpt4 book ai didi

python - 如何找到旋转图像边界框的新坐标以修改其xml文件以进行Tensorflow数据增强?

转载 作者:行者123 更新时间:2023-12-02 17:34:39 24 4
gpt4 key购买 nike

我正在尝试创建更多数据集以在Tensorflow中训练我的模型以进行数据预测。我将边界框的标签添加到原始图像。我想将图像旋转45度,并为新的精确边界框(矩形)修改xml文件以标记新创建的图像。它正在调整大小并提取到窗口以不丢失图像上的任何内容。

让我告诉你我如何尝试:

def rotateImage(mat, angle):
height, width = mat.shape[:2]
image_center = (width / 2, height / 2)

rotation_mat = cv2.getRotationMatrix2D(image_center, angle, 1)

radians = math.radians(angle)
sin = math.sin(radians)
cos = math.cos(radians)
bound_w = int((height * abs(sin)) + (width * abs(cos)))
bound_h = int((height * abs(cos)) + (width * abs(sin)))

rotation_mat[0, 2] += ((bound_w / 2) - image_center[0])
rotation_mat[1, 2] += ((bound_h / 2) - image_center[1])

rotated_mat = cv2.warpAffine(mat, rotation_mat, (bound_w, bound_h))
return rotated_mat


image = cv2.imread("test.jpg")

angle = 45

rotated_45_image = image.copy()

rotated_45_image = rotateImage(rotated_45_image, angle=45)

tree_for_45_rotated = ET.parse(file_name + ".xml")
root = tree_for_xml.getroot()

for object in root.iter("object"):
xmin = object.find("bndbox").find("xmin")
ymin = object.find("bndbox").find("ymin")
xmax = object.find("bndbox").find("xmax")
ymax = object.find("bndbox").find("ymax")
print(xmin.text, ymin.text, xmax.text, ymax.text)
print("new")
new_xmin = math.cos(angle) * int(xmin.text) - math.sin(angle) * int(ymin.text)
new_xmax = math.cos(angle) * int(xmax.text) - math.sin(angle) * int(ymin.text)
new_ymin = math.sin(angle) * int(xmin.text) + math.cos(angle) * int(ymin.text)
new_ymax = math.sin(angle) * int(xmin.text) + math.cos(angle) * int(ymax.text)
print(new_xmin, new_ymin, new_xmax, new_ymax)

旋转后,图像如下所示:
Rotated 45

顺便说一句,我正在使用Python和OpenCV。我无法计算出确切的新坐标来标记图像。

谢谢

最佳答案

我无法在上面的帖子中添加评论,对不起。您所需要的只是在转角旋转值之后打印

img = cv2.imread("test.jpg")
rotated, corners = rotateImage(img, 30)
print(corners)

如果您想要特定的值,请使用
print(corners[0])
print(corners[1])
print(corners[2])
print(corners[3])

关于python - 如何找到旋转图像边界框的新坐标以修改其xml文件以进行Tensorflow数据增强?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52594956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com