gpt4 book ai didi

python - transformPerspective openCV的插值

转载 作者:行者123 更新时间:2023-12-02 17:50:55 26 4
gpt4 key购买 nike

我做了一个小程序,它读取图像,转换透视图,然后重绘图像。目前我手动将每个像素重写为输出,但是这样会丢失很多点,结果是图像非常模糊(转换越大,图像越模糊)。这是我的代码:

U, V = np.meshgrid(range(img_array.shape[1]), range(img_array.shape[0]))
UV = np.vstack((U.flatten(),V.flatten())).T
UV_warped = cv2.perspectiveTransform(np.array([UV]).astype(np.float32), H)

UV_warped = UV_warped[0]
UV_warped = UV_warped.astype(np.int)

x_translation = min(UV_warped[:,0])
y_translation = min(UV_warped[:,1])

new_width = np.amax(UV_warped[:,0])-np.amin(UV_warped[:,0])
new_height = np.amax(UV_warped[:,1])-np.amin(UV_warped[:,1])

UV_warped[:,0] = UV_warped[:,0] - int(x_translation)
UV_warped[:,1] = UV_warped[:,1] - int(y_translation)

# create box for image
new_img = np.ones((new_height+1, new_width+1))*255 # 0 = black 255 - white background

for uv_pix, UV_warped_pix in zip(UV, UV_warped):
x_orig = uv_pix[0] # x in origineel
y_orig = uv_pix[1] # y in origineel
color = img_array[y_orig, x_orig]

x_new = UV_warped_pix[0] # new x
y_new = UV_warped_pix[1] # new y

new_img[y_new, x_new] = np.array(color)

img = Image.fromarray(np.uint8(new_img))
img.save("test.jpg")

有没有办法以不同的方式做到这一点(可能是插值?)所以我不会丢失这么多像素并且图像不会那么微弱?

最佳答案

您正在寻找函数 warpPerspective (正如在回答您之前的问题 OpenCV perspective transform in python 时已经提到的)。

你可以像这样使用这个函数(虽然我不熟悉python):

cv2.warpPerspective(src_img, H_from_src_to_dst, dst_size, dst_img)

编辑 :可以引用 this OpenCV tutorial .它使用仿射变换,但存在用于透视变换的类似 OpenCV 函数。

关于python - transformPerspective openCV的插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21936213/

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