2017-08-02 88 views
0

看看這個Python代碼:OpenCV的旋轉與warpAffine Python中導致錯誤邊境

degrees = 90 
center = (24, 24) 

img  = np.ones((48,48,3)) * 255 
mat  = cv2.getRotationMatrix2D(center, degrees, 1.0) 
img  = cv2.warpAffine(img, mat, (48, 48)) 

我的期望是,3通道,完全飽和的,白方將被創建並存儲在IMG。之後,它會旋轉90度。將白色方塊旋轉90度應該會導致......難以區分的白色方塊。但是,當我:

plt.imshow(img) 
plt.show(img) 

我看到一個錯誤的黑色邊框:

What gives

有沒有什麼辦法讓warpAffine工作正常,即沒有錯誤的邊界旋轉圖像?我試過以下修改無濟於事:

center = (23, 23) 
center = (24, 23) 
center = (23, 24) 
center = (25, 25) 
center = (24, 25) 
center = (25, 24) 
+0

在旋轉之前顯示它時,它看起來像什麼?清潔?此外,如果您給它一個奇數的像素尺寸,並且實際上可以選取中心像素作爲中心,會發生什麼情況? –

+0

旋轉之前,它是預期的乾淨的正方形。不幸的是,我無法改變圖像尺寸,因爲在上面的虛擬示例中它是一個白色圖像 - 但我的實際數據集是CT掃描,我試圖維護尺寸信息。 –

+1

你試過旋轉約24.5,24.5嗎?它看起來像getRotationMatrix2D接受一個Point2f,所以它應該採用浮點數 –

回答

2

您應該使用圖像的確切中心,而不是下一個最接近的東西。使用(24,24),旋轉稍微偏離中心。

既然getRotationMatrix2D接受一個Point2f,你應該通過中心作爲(23.5,23.5),因爲它是0 and 47之間的中間點。