Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.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 如何在WraptTransform后找到一个点?_Python_Opencv - Fatal编程技术网

Python 如何在WraptTransform后找到一个点?

Python 如何在WraptTransform后找到一个点?,python,opencv,Python,Opencv,在透视之前,我在原始图像下找到了一组坐标/点,如何在经过透视校正的现在裁剪和校正的图像中获得相应的点 例如: import cv2 as cv import numpy as np import matplotlib.pyplot as plt img = cv.imread('sudoku.png') rows,cols,ch = img.shape pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]]) pts2 = np.floa

在透视之前,我在原始图像下找到了一组坐标/点,如何在经过透视校正的现在裁剪和校正的图像中获得相应的点

例如:

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

img = cv.imread('sudoku.png')
rows,cols,ch = img.shape
pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
pts2 = np.float32([[0,0],[300,0],[0,300],[300,300]])

point = np.array([[10,10]])

M = cv.getPerspectiveTransform(pts1,pts2)
dst = cv.warpPerspective(img,M,(300,300))

plt.subplot(121),plt.imshow(img),plt.title('Input')
plt.subplot(122),plt.imshow(dst),plt.title('Output')

如何将img映射中的新坐标[10,10]获取到dst图像?

您必须执行与图像相同的变换(数学上)。在这种情况下,它意味着使用(注意,输入需要每个点有一行、一列和两个通道——第一个是X,第二个是Y坐标)


此函数将变换所有输入点,不执行剪切和剪切。您将需要对转换后的坐标进行后期处理,并丢弃位于裁剪区域之外的坐标。在您的情况下,您希望保留
(0)在坐标上应用相同变换的点。(即
cv2.perspectiveTransform
)不perspectiveTransform不知道从何处裁剪图像?我更新了我的问题,以显示我想要的内容。请您也附上一个输入图像示例(或它来自何处的链接)?(哦,我猜是OpenCV样本中的一个,对吗?)是的,我从OpenCV样本数据中获取图像。对。
perspectiveTransform
不会进行任何剪裁,因此您必须对变换后的坐标进行后处理,并丢弃掉裁剪区域之外的坐标——在您的情况下,您将保留
(0)的点
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

img = cv.imread('sudoku.png')
rows,cols,ch = img.shape
pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
pts2 = np.float32([[0,0],[300,0],[0,300],[300,300]])

points = np.float32([[[10, 10]], [[116,128]], [[254,261]]])

M = cv.getPerspectiveTransform(pts1,pts2)
dst = cv.warpPerspective(img,M,(300,300))

# Transform the points
transformed = cv.perspectiveTransform(points, M)

# Perform the cropping -- filter out points that are outside the crop area
cropped = []
for pt in transformed:
    x, y = pt[0]
    if x >= 0 and x < dst.shape[1] and y >= 0 and y < dst.shape[0]:
        print "Valid point (%d, %d)" % (x, y)
        cropped.append([[x,y]])
    else:
        print "Out-of-bounds point (%d, %d)" % (x, y)

# Turn it back into a single numpy array
cropped = np.hstack(cropped)

# Visualize
plt.subplot(121)
plt.imshow(img)
for pt in points:
    x, y = pt[0]
    plt.scatter(x, y, s=100, c='red', marker='x')

plt.title('Input')

plt.subplot(122)
plt.imshow(dst)
for pt in transformed:
    x, y = pt[0]
    plt.scatter(x, y, s=100, c='red', marker='x')

plt.title('Output')

plt.show()
Out-of-bounds point (-53, -63)
Valid point (63, 67)
Valid point (192, 194)