2015-05-14 410 views
3

當使用warpPerspective將圖像縮小到較小時,周圍會出現黑色區域​​。這可能是這樣的:設置Python OpenCV warpPerspective的背景

如何使黑色邊框是白色的?

pts1 = np.float32([[minx,miny],[maxx,miny],[minx,maxy],[maxx,maxy]]) 
pts2 = np.float32([[minx + 20, miny + 20, 
        [maxx - 20, miny - 20], 
        [minx - 20, maxy + 20], 
        [maxx + 20, maxy + 20]]) 

M = cv2.getPerspectiveTransform(pts1,pts2) 
dst = cv2.warpPerspective(dst, M, (width, height)) 

如何去除warpPerspective後的黑色邊框?

回答

7

如果你看一下從網上OpenCV的文檔warpPerspective功能(http://docs.opencv.org/modules/imgproc/doc/geometric_transformations.html)的文件說,有你可以給函數指定常數邊框顏色參數:

cv2.warpPerspective(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) 

其中

src – input image. 
dst – output image that has the size dsize and the same type as src . 
M – 3\times 3 transformation matrix. 
dsize – size of the output image. 
flags – combination of interpolation methods (INTER_LINEAR or INTER_NEAREST) and the optional flag WARP_INVERSE_MAP, that sets M as the inverse transformation (\texttt{dst}\rightarrow\texttt{src}). 
borderMode – pixel extrapolation method (BORDER_CONSTANT or BORDER_REPLICATE). 
borderValue – value used in case of a constant border; by default, it equals 0. 

因此,像:

cv2.warpPerspective(dist, M, (width, height), cv2.INTER_LINEAR, cv2.BORDER_CONSTANT, 255) 

應該將邊框更改爲常白的顏色。

+0

對於需要在最後的白色''... cv2.BORDER_CONSTANT,255,255,255)'' – GuySoft

+1

我會說,它應該是:'cv2.warpPerspective(距離遠,男,(寬度,高度),cv2.INTER_LINEAR,borderValue =(255,255,255))' – 4Oh4

3

儘管它在文檔中未作爲可能的borderMode列出,但您也可以設置borderMode = cv2.BORDER_TRANSPARENT,它不會創建任何邊框。它將保持目標圖像的不變的像素設置。通過這種方式,您可以將邊框設爲白色或邊框爲您選擇的圖像。

例如,對於帶白色邊框的圖像:

white_image = np.zeros(dsize, np.uint8) 

white_image[:,:,:] = 255 

cv2.warpPerspective(src, M, dsize, white_image, borderMode=cv2.BORDER_TRANSPARENT) 

將創建變換的圖像白色邊框。除邊框外,只要與目的地尺寸相同,您也可以將任何內容加載爲背景圖片。例如,如果我有一張背景全景圖,那麼我可以使用全景圖作爲背景。

全景與扭曲的圖像疊加:

panorama = cv2.imread("my_panorama.jpg") 

cv2.warpPerspective(src, M, panorama.shape, borderMode=cv2.BORDER_TRANSPARENT) 
4

接受的答案不再起作用。嘗試使用白色填充曝光區域。

outImg = cv2.warpPerspective(img, tr, (imgWidth, imgHeight), 
    borderMode=cv2.BORDER_CONSTANT, 
    borderValue=(255, 255, 255))