2015-01-02 164 views
0

我正在創建一個應用程序,通過將它與單應矩陣相乘來找到圖像的鳥瞰圖透視圖。我已閱讀了很多關於它的內容,似乎將矩陣相乘的函數是warpPerspective()。雖然當我這樣做時,生成的圖像是一個圖像,其中所有像素都爲零,只有第一行不是。OpenCV中的Homography矩陣

請給我提供一種將單應矩陣乘以圖像的方式,無論是C++還是Python。

下面是我使用的代碼:

import cv2 
import numpy as np 

tilt = np.pi * 35/180 

a = np.zeros((3, 3)) 

a[0][0] = 1 
a[1][1] = np.sin(tilt) 
a[1][2] = -np.sin(tilt) 
a[2][2] = np.cos(tilt) 
a[2][2] = np.cos(tilt) 

src = cv2.imread("S2.jpg") 
width, height, depth = src.shape 

output = cv2.warpPerspective(src, a, (width, height)) 

cv2.imwrite("results.png", output) 

圖像我申請單應於:

Source Image

使用warpPerspective的結果是:

Result Image

可以看出,結果圖片的左上方有一小部分。

您的幫助是高度讚賞!

+1

可以請你嘗試一個[0] [0] = 1 一個[0] [1] = 0 一個[0] [2] = 100 一個[1] [0] = 0 一個[1 ] [1] = 0 a [1] [2] = 100 a [2] [0] = 0 a [2] [1] = 0 a [2] [2] = 1而不是?您的圖片應該向右移100個像素,向下移動100個像素。如果這是有效的,你的單應性是錯誤的。 (順便說一下,你設置了元素[2] [2]兩次!) – Micka

+0

看着你的代碼我想你想圍繞一些3D軸旋轉相機?這不適用於單應性(因爲你想旋轉相機而不是圖像)!您需要場景和4x4變換矩陣的3D描述,但這不適用於warpPerspective和圖像單應性。你必須用適當的方法來計算單應性。 – Micka

+0

我試過翻譯,它工作。關於第二條評論,我實際上正在實施本文的工作(https://www.site.uottawa.ca/~laganier/publications/topVI00.pdf),其中單應性矩陣在第2頁eq.6中給出。如果您有任何方程式或單應性矩陣參數,那麼如果您提供它,將會受到高度讚賞。否則,請帶我到我應該採取的方向。 – coding4fun

回答

1

我認爲它有與你a矩陣做,因爲調用你的代碼

a = np.array([[1, 0, 0], 
       [0, 1, 0], 
       [0, 0, 1]], 
      dtype=np.float32) 

工作正常。