2016-10-18 24 views
2

"PerspectiveTransform"メソッドを使用して、指定された矩形内のイメージを変換しています。メソッド "warpPerspective"はうまくいきますが、出力に黒い背景が含まれていて、黒色を削除して透明にしたいと考えています。画像から黒い背景を削除し、それを透明にする方法はopencvですか?

import cv2 
import numpy as np 

img2 = cv2.imread(r"C:\Users\test\Desktop\map.jpg") 
input_quad = np.float32([[0,0],[1024,0],[1024,752],[0,752]]) 
output_quad = np.float32([[4,139],[500,137],[500,650],[159,636]]) 
lambda_img = np.zeros((728, 992,3), np.uint8) 
lambda_img[:,:,:] = 255 
lambda_val = cv2.getPerspectiveTransform(input_quad, output_quad) 
dst = cv2.warpPerspective(img2,lambda_val,(992,728),lambda_img, cv2.INTER_CUBIC, borderMode=cv2.BORDER_TRANSPARENT) 
cv2.imwrite("Valchanged.png",dst) 

[enter image description here][1] 
[![enter image description here][2]][2] 

以下は、私が復活させた出力です。

enter image description here

答えて

2

あなたはBGRAドメインにBGRドメインからの入力画像を変換する必要がありますので、ご入力された画像は.jpg形式であるため:

img2 = cv2.imread(r"C:\Users\test\Desktop\map.jpg") 
img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2BGRA) 

また、あなたは新しいlambda_imgを定義する必要はありませんあなたの側では、cv2.warpPerspectiveは変換を適用した後にnumpyの配列を返します。

dst = cv2.warpPerspective(img2, lambda_val, (992,728), flags = cv2.INTER_CUBIC, borderMode=cv2.BORDER_CONSTANT, borderValue = [0, 0, 0, 0]) 

もしborderMode=cv2.BORDER_CONSTANTを定義する場合、あなたはまた、境界に沿って充填されますborderValueを定義する必要があり、この場合には、即ち透明又は"#00000000"

0アルファ値が黒色であります
関連する問題