gpt4 book ai didi

python - 在 OpenCV 中旋转图像

转载 作者:太空宇宙 更新时间:2023-11-03 22:13:27 29 4
gpt4 key购买 nike

我正在尝试编写一个 Python 函数来裁剪、旋转和调整面部大小。它用于面部识别应用程序。我将眼睛的坐标传递给函数,函数处理图像(旋转它,使眼睛的平面平行于图像的水平轴并缩放/裁剪/调整大小)。问题是面部根本没有旋转。它们只是被裁剪。修改以下函数以返回旋转后的图像和旋转前完成的图像副本。它们是相同的。

def CropFace(image, eye_left=(0,0), eye_right=(0,0), offset_pct=(0.25,0.25), dest_sz = (250,250)):

offset_h = math.floor(float(offset_pct[0])*dest_sz[0])
offset_v = math.floor(float(offset_pct[1])*dest_sz[1])

eye_direction = (eye_right[0] - eye_left[0], eye_right[1] - eye_left[1])

rotation = -math.atan2(float(eye_direction[1]), float(eye_direction[0]))

dist = Distance(eye_left, eye_right)

reference = dest_sz[0] - 2.0*offset_h

scale = float(dist) / float(reference)

sz = image.shape
if len(sz) > 2: sz = sz[:2]

print rotation

image2 = image.copy()

mat = cv2.getRotationMatrix2D(eye_left, rotation, 1.0)
result = cv2.warpAffine(image, mat, sz, flags = cv2.INTER_CUBIC)

crop_xy = (eye_left[0] - scale*offset_h, eye_left[1] - scale*offset_v)
crop_size = (dest_sz[0]*scale, dest_sz[1]*scale)
result = result[int(crop_xy[1]):int(crop_xy[1]+crop_size[1]), int(crop_xy[0]):int(crop_xy[0]+crop_size[0])]
image2 = image2[int(crop_xy[1]):int(crop_xy[1]+crop_size[1]), int(crop_xy[0]):int(crop_xy[0]+crop_size[0])]

return (result, image2)

最佳答案

问题是对于

cv2.getRotationMatrix2D(center, angle, scale)

angle 参数以度为单位 ( opencv documentation )

而 Python,

angle = math.atan2(y, x)

返回以弧度为单位的角度。 ( Python documentation )

因此当 OpenCV 需要度数时,rotation 指定的角度以弧度为单位。

关于python - 在 OpenCV 中旋转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26118131/

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