2017-02-12 34 views
0

Я пишу простое приложение в OpenCV, которое удаляет черный фон изображения и сохраняет его на белом фоне в JPG. Однако он всегда сохраняется на черном фоне.Невозможно сохранить изображение в 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

Сохранить это как PNG, так как изображения JPEG не поддерживает прозрачность. –

+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 s.

  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