Вы можете просто использовать 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);
Также несколько замечаний:
Вы можете напрямую загрузить изображение в оттенках серого с помощью: imread(..., IMREAD_GRAYSCALE);
Вы можете использовать все эти временные Mat
s.
- Вы уверены, что хотите использовать
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);
Сохранить это как PNG, так как изображения JPEG не поддерживает прозрачность. –
спасибо, но я не хочу прозрачности, я хочу белый цвет – mahdi101
Пожалуйста, приложите образец ввода и ожидаемый результат, а также – ZdaR