Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 透视openCV的插值_Python_Opencv - Fatal编程技术网

Python 透视openCV的插值

Python 透视openCV的插值,python,opencv,Python,Opencv,我制作了一个小程序,读取图像,变换透视图,然后重新绘制图像。目前,我手动将每个像素重写为输出,但这样会丢失很多点,结果是图像非常模糊(变换越大,图像越模糊)。这是我的代码: 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(

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

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")

有没有办法做到这一点(可能是插值?),这样我就不会失去那么多像素,图像也不会那么模糊?

您正在寻找函数(如在回答之前的问题时所述)

您可以这样使用此函数(尽管我不熟悉python):


编辑:您可以参考。它使用仿射变换,但透视变换也有类似的OpenCV函数。

感谢您的快速响应。不过,我的输出将以坐标为单位。其他人告诉我warpPerspective的问题是,它显然不能很好地处理大的翻译。是的,它确实可以工作,只有当翻译太大时,源图像才会离开目标图像的视野,因此你看不到任何东西。你所说的“我的输出将以坐标表示”是什么意思?图像取自现实世界,因此它们将是现实世界的坐标,因此图像不包含颜色,而是以米为单位的坐标?
cv2.warpPerspective(src_img, H_from_src_to_dst, dst_size, dst_img)