我有一個坐標陣列,它標記了地板上的一個區域。
我想生成一個新的陣列,其中所有的坐標都被轉換了,這樣我就得到了一個扭曲的陣列。這些點應該看起來像下面的圖片。請注意,我想用新陣列來生成圖形。它現在還不存在。它是在有了新陣列之后生成的。
我已經知道了與第一個圖形的距離。
如果有幫助的話,我知道所有坐標之間的距離。坐標json看起來是這樣的,其中distance_to_next包含到下一個點的距離,單位是cm:
[
{
"x"/span>: 295。
"y": 228,
"distance_to_next": 200.
},
{
"x": 559,
"y": 263,
"distance_to_next": 30.
},
{
"x": 551,
"y": 304,
"distance_to_next": 50.
},
{
"x": 473,
"y": 290,
"distance_to_next": 70.
},
{
"x": 451,
"y": 352,
"distance_to_next": 150.
},
{
"x": 249,
"y": 313,
"distance_to_next": 100.
}
]
第一個點總是在左上方。
我正在使用python和opencv2,我知道各種函式,如cv.warpAffine。
cv.warpPerspective, cv.findHomography, cv.perspectiveTransform等等,但是我不確定在這里使用哪一個。
誰能為我指出正確的方向?我是否錯過了一些明顯的東西?
uj5u.com熱心網友回復:
你的坐標json中的點沒有與白色多邊形對齊。如果我使用它們,我會得到如下所示的綠色多邊形:
import cv2
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
# 加載圖片'./input.jpg'/span>)
# 創建影像的副本 # 創建影像的副本
img_copy = np.copy(img)
img_copy = cv2.cvtColor(img_copy,cv2.COLOR_BGR2RGB)
pts = np. array([[295,228], [559, 263],[551,304] 。 [473,290], [451, 352],[249,313], np. int32)
pts = pts.reshape((-1,1, 2)
img_copy2 = cv2. polylines(img_copy,[pts],True,(0,255, 0), thickness=3)
plt.imshow(img_copy2)
所以我手動找到了你的白色多邊形的近似坐標,并將它們疊加在綠色的白色多邊形上。而你需要所需的多邊形的坐標。我把它們顯示為紅色。
img = cv2.imread(' ./input.jpg')
img_copy = np.copy(img)
img_copy = cv2.cvtColor(img_copy,cv2.COLOR_BGR2RGB)
input_pts = np. array([[300,300], [890,380], [830,600],[200,480], np. int32)
pts = input_pts.reshape((-1,1,2)
img_copy3 = cv2. polylines(img_copy,[pts],True,(0,255, 0), thickness=3)
output_pts= np. array([[300,300], [850,300], [850,520],[300,520], np. int32)
pts = output_pts.reshape((-1,1,2)
img_copy3 = cv2. polylines(img_copy3,[pts],True,(255,0, 0), thickness=3)
plt.imshow(img_copy3)
我們需要在這里使用cv2.getPerspectiveTransform。但是它只接受4個點作為輸入,所以要舍棄2個點。
img = cv2.imread(' ./input.jpg')
img_copy = np.copy(img)
img_copy = cv2.cvtColor(img_copy,cv2.COLOR_BGR2RGB)
input_pts = np.float32(input_pts)
output_pts = np.float32(output_pts)
# 計算透視變換M# 將透視變換應用于影像。
out = cv2.warpPerspective(img_copy,M,(img_copy.shape[1], img_copy.shape[0]),flags=cv2.inter_LINEAR)
# 顯示轉換后的影像。
plt.imshow(out)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/311683.html
標籤:
上一篇:用CV2讀取影像的速度太慢
下一篇:相機校準,焦距值似乎太大





