python 如何使用yolo格式图像坐标裁剪图像

noj0wjuj  于 2022-12-28  发布在  Python
关注(0)|答案(2)|浏览(208)

问候stackoverflow社区,我有200张图片,标记为txt文件,用于yolo自定义模型。
现在,我想使用txt坐标裁剪这些图像中存在的所有头部。
我已经尝试了opencv
但我得到的错误。
你能帮我把这些图像的头部自动裁剪一下吗?

请查看更新代码:

import cv2

img = cv2.imread(<image path>)

dh, dw, _ = img.shape
print(dh,dw)

x,y,w,h = 0.360667, 0.089000, 0.113333, 0.130000

x,y,w,h = int(x*dw), int(y*dh), int(w*dw), int(h*dh)

print(x, y, w, h)

imgCrop = img[y:y+h,x:x+w]

cv2.imshow("Crop Image",imgCrop)

cv2.waitKey(0)

要更好地了解问题,请参阅以下图片:

eit6fx6z

eit6fx6z1#

# Resource: https://github.com/AlexeyAB/darknet
# <x_center> <y_center> <width> <height> - float values relative to width and height of image,
# it can be equal from (0.0 to 1.0]
# <x> = <absolute_x> / <image_width>
# <height> = <absolute_height> / <image_height>
# attention: <x_center> <y_center> - are center of rectangle (are not top-left corner)

box = "1 0.615234 0.254688 0.148438 0.178125"
class_id, x_center, y_center, w, h = box.strip().split()
x_center, y_center, w, h = float(x_center), float(y_center), float(w), float(h)
x_center = round(x_center * dw)
y_center = round(y_center * dh)
w = round(w * dw)
h = round(h * dh)
x = round(x_center - w / 2)
y = round(y_center - h / 2)

imgCrop = img[y:y + h, x:x + w]
afdcj2ne

afdcj2ne2#

你需要把这些浮点值转换成整数,你可以把它们乘以图像的宽度和高度,然后把它们转换成整型。
示例:

x,y,h,w = int(x*img_width), int(y*img_height), int(h*img_higth), int(w*img_width)

然后索引图像:

imgCrop = img[x:x+w, y:y+h]

相关问题