2017-02-12 5 views
0

Ich schreibe eine einfache App in OpenCV, die schwarzen Hintergrund eines Bildes löschen und speichern Sie es mit weißem Hintergrund in JPG. Es wird jedoch immer mit schwarzem Hintergrund gespeichert.Kann nicht speichern Bild in JPG mit weißem Hintergrund OpenCV

Dies ist mein Code:

Mat Imgsrc = imread("../temp/temp1.jpg",1) ; 
mat dest; 
Mat temp, thr; 

cvtColor(Imgsrc, temp, COLOR_BGR2GRAY); 
threshold(temp,thr, 0, 255, THRESH_BINARY); 

Mat rgb[3]; 
split(Imgsrc,rgb); 

Mat rgba[4] = { rgb[0],rgb[1],rgb[2],thr }; 
merge(rgba,4,dest); 
imwrite("../temp/r5.jpg", dest); 
+1

speichern es als PNG, JPEG-Bilder, da die Transparenz nicht unterstützen kann. –

+0

danke, aber ich will nicht Transparenz ich will weiße Farbe – mahdi101

+0

Bitte fügen Sie Beispiel Eingabe und erwartete Ausgabe sowie – ZdaR

Antwort

1

Sie einfach setTo mit einer Maske einige Pixel auf einen bestimmten Wert entsprechend einer Maske einstellen können:

Mat src = imread("../temp/temp1.jpg",1) ; 
Mat dst; 
Mat gray, thr; 

cvtColor(src, gray, COLOR_BGR2GRAY); 

// Are you sure to use 0 as threshold value? 
threshold(gray, thr, 0, 255, THRESH_BINARY); 

// Clone src into dst 
dst = src.clone(); 

// Set to white all pixels that are not zero in the mask 
dst.setTo(Scalar(255,255,255) /*white*/, thr); 

imwrite("../temp/r5.jpg", dst); 

Auch ein paar Hinweise:

  1. Sie können ein Bild direkt als Graustufen laden: imread(..., IMREAD_GRAYSCALE);

  2. Sie können vermeiden, all diese temporären s zu verwenden.

  3. Sind Sie sicher, dass Sie 0 als Schwellenwert verwenden möchten? In diesem Fall können Sie vermeiden, theshold vollständig anzuwenden, und alle Pixel, die 0 im Graustufenbild sind, auf Weiß setzen: dst.setTo(Scalar(255,255,255), gray == 0); Diese

ist, wie ich tun würde:

// Load the image 
Mat src = imread("path/to/img", IMREAD_COLOR); 

// Convert to grayscale 
Mat gray; 
cvtColor(src, gray, COLOR_BGR2GRAY); 

// Set to white all pixels that are 0 in the grayscale image 
src.setTo(Scalar(255,255,255), gray == 0) 

// Save 
imwrite("path/to/other/img", src); 
+0

Vielen Dank, es funktioniert – mahdi101

Verwandte Themen