2017-02-12 5 views
0

画像の黒い背景を削除してJPGに白い背景で保存する簡単なアプリケーションをOpenCVで作成します。ただし、常に黒い背景で保存されます。白い背景のJPGで画像を保存できませんOpenCV

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

JPEG画像は、透明性をサポートすることはできませんので、PNGとして保存します。 –

+0

ありがとう、私は白い色がほしい透明性がほしいとは思わない – mahdi101

+0

サンプル入力と期待される出力を添付してください。 – ZdaR

答えて

1
あなたは単にマスクに応じて特定の値にいくつかのピクセルを設定するマスクで setToを使用することができます

:また

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); 

いくつかの注意事項:

この

は私のコードです
  1. 画像をグレースケールとして直接ロードするには、imread(..., IMREAD_GRAYSCALE);

  2. これらのすべてを一時的に使用することは避けることができます。Mat

  3. しきい値として0を使用しますか?この場合、thesholdを完全に適用しないで、グレースケールイメージの0であるすべてのピクセルを白に設定することができます:dst.setTo(Scalar(255,255,255), gray == 0);

これは私がしたい方法です:

// 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

ありがとうございます – mahdi101

関連する問題