2016-11-10 8 views
5

में हथियार आउटपुट से पारदर्शी बनाने के लिए मैं पाइथन ओपनसीवी का उपयोग कर हथियार आउटपुट से काले पृष्ठभूमि को हटाने की कोशिश कर रहा हूं।काले रंग की पृष्ठभूमि को हटाने और पाइथन ओपन सीवी

import numpy as np 
import cv2 

img = cv2.imread(r'myfile_1.png') 
mask = np.zeros(img.shape[:2],np.uint8) 

bgdModel = np.zeros((1,65),np.float64) 
fgdModel = np.zeros((1,65),np.float64) 

rect = (1,1,665,344) 
cv2.grabCut(img,mask,rect,bgdModel,fgdModel,5,cv2.GC_INIT_WITH_RECT) 

mask2 = np.where((mask==2)|(mask==0),0,1).astype('uint8') 
img = img*mask2[:,:,np.newaxis] 

cv2.imshow('img',img) 
cv2.imwrite('img.png',img) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

ऊपर कोड मैंने हथियार आउटपुट को बचाने के लिए लिखा था। कृपया सुझाव दें, मैं काला पृष्ठभूमि को कैसे हटा सकता हूं और इसे पारदर्शी बना सकता हूं?

enter image description here

enter image description here

+1

आपको बस छवि के अग्रभूमि के साथ अल्फा चैनल जोड़ना है। इसका पहले यहां उत्तर दिया गया है: http://stackoverflow.com/questions/35886307/how-to-make-white-part-of-the-image-transparent-by-using-android-opencv – masad

+0

धन्यवाद मासाद। आपने मेरा दिन बचाया –

उत्तर

14

मैं निम्नलिखित स्निपेट का उपयोग करके इस हासिल किया है।

import cv2 
file_name = "grab.png" 

src = cv2.imread(file_name, 1) 
tmp = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY) 
_,alpha = cv2.threshold(tmp,0,255,cv2.THRESH_BINARY) 
b, g, r = cv2.split(src) 
rgba = [b,g,r, alpha] 
dst = cv2.merge(rgba,4) 
cv2.imwrite("test.png", dst) 

enter image description here

2

यह जावा कोड है। उपयोग हथियार के बाद, परिणाम पृष्ठभूमि पारदर्शी है।

public Bitmap removeBackground(Bitmap bitmap) { 
    //GrabCut part 
    Mat img = new Mat(); 
    Utils.bitmapToMat(bitmap, img); 

    int r = img.rows(); 
    int c = img.cols(); 
    Point p1 = new Point(c/100, r/100); 
    Point p2 = new Point(c - c/100, r - r/100); 
    Rect rect = new Rect(p1, p2); 

    Mat mask = new Mat(); 
    Mat fgdModel = new Mat(); 
    Mat bgdModel = new Mat(); 

    Mat imgC3 = new Mat(); 
    Imgproc.cvtColor(img, imgC3, Imgproc.COLOR_RGBA2RGB); 

    Imgproc.grabCut(imgC3, mask, rect, bgdModel, fgdModel, 5, Imgproc. 
      GC_INIT_WITH_RECT); 

    Mat source = new Mat(1, 1, CvType.CV_8U, new Scalar(3.0)); 
    Core.compare(mask, source/* GC_PR_FGD */, mask, Core.CMP_EQ); 

    //This is important. You must use Scalar(255,255, 255,255), not Scalar(255,255,255) 
    Mat foreground = new Mat(img.size(), CvType.CV_8UC3, new Scalar(255, 
      255, 255,255)); 
    img.copyTo(foreground, mask); 

    // convert matrix to output bitmap 
    bitmap = Bitmap.createBitmap((int) foreground.size().width, 
      (int) foreground.size().height, 
      Bitmap.Config.ARGB_8888); 
    Utils.matToBitmap(foreground, bitmap); 
    return bitmap; 
} 
संबंधित मुद्दे