2015-09-02 3 views
1

Я хочу применить маскирование к изображению с помощью функции copyTo() openCv, но маскирование не работает. Я все равно получаю тот же образ.OpenCv copyTo() не работает

Когда я искал в Интернете, я видел некоторые предложения, как:

-source и назначения изображений должны быть разными, -source изображение должно иметь тип CV_8U, -mask изображение должно иметь тип CV_8U и т.д.

Я пробовал все из них, но я не мог исправить проблему. Более того, на официальном сайте OpenCv такие ограничения не упоминаются.

Вот часть моего кода:

Mat source; //initialized in some way 
Mat mask; // this is also initialized in some way 

source.copyTo(source, mask); 
+0

Из источника вы копируете все пиксели, которые активны в маске для источника. что вы ожидаете от всех пикселей, которые неактивны в маске? – Micka

+1

try cv :: Mat destination (source.size(), source.type(), cv :: Scalar (0,0,0,0)); source.copyTo (назначение, маска); – Micka

ответ

2

Ваша маска должна быть одноканальное изображение со значениями либо 0 или 255.

Mat mask(source.rows, source.cols, CV_8UC1, Scalar(0)); 

с изображением этой маски, вы должны получить пустое изображение в пункте назначения, потому что все значения маски равны нулю.

И с помощью следующей маски вы должны иметь возможность получить одно и то же изображение цели, как исходное изображение, потому что все ваше изображение маски активируется со значениями 255.

Mat mask(source.rows, source.cols, CV_8UC1, Scalar(255)); 

И для какой-то другой маски, для которых только несколько областей изображений содержат белые пиксели, вы получите, что регионы исходного изображения в целевом изображении.

Смежные вопросы