2015-12-09 3 views
2

У меня есть изображение размером 200x200 пикселей, и я хочу сохранить только данные для определенного региона внутри него. Проверьте следующее изображение:участок от изображения и сохранить границы

Image

Всего из квадрата является 200x200 pixels.I хотят удалить из него меньшего квадрата (белый) .so, хранить только ту информацию, которая включена в синей области. Но я хочу сохранить размеры 200x200.

Я пробовал:

Mat whiteArea; 
    whiteArea = ImageInitial(Range(50,200) , Range(50,200)); 

    Size size(200,200); 
    Mat dst; 
    resize(whiteArea,dst,size); 

    Mat FinalImage; 
    subtract(ImageInitial,dst,FinalImage); 

Я изменение размера белую область, потому что я хочу, чтобы вычитать его из исходного изображения. Моя проблема в том, что она дает мне исходное изображение.

Возможно, изменение размера является проблемой. Но тогда как вычесть 2 изображения разных размеров?

+0

так что вы хотите, чтобы вычесть только внутреннюю часть изображения от себя? и эта внутренняя часть идет от местоположения пикселей (50, 50) до (250, 250)? – Micka

ответ

2

пытается использовать подизображения или использовать маску:

// use a roi (nice if your target area is rectangular and you know the position) 
Rect whiteArea = Rect(50,50, 200,200); // creates a roi of the inner rect 

Mat FinalImage = ImageInitial.clone(); 
// now set the roi area to zero: 
FinalImage (whiteArea).setTo(Scalar(0,0,0)); 
// or FinalImage(whiteArea) = FinalImage(whiteArea) - FinalImage(whiteArea); 

imshow("version 1 with subimage", FinalImage); 
waitkey(0); 


// or use a mask (nice if that region can has arbitrary shape etc and you have to extract it first): 
Scalar lowerColorBound = Scalar(x,y,z); //some BGR values to find the color you want to eliminate 
Scalar upperColorBound = Scalar(a,b,c); //some BGR values to find the color you want to eliminate 
Mat mask; 
inRange(ImageInitial, lowerColorBound, upperColorBound mask) 
// use the mask for subtraction: 
subtract(ImageInitial, ImageInitial, FinalImage , mask); 

imshow("version 2 with mask", FinalImage); 
waitkey(0); 
+0

: Отлично, спасибо! (Вторая версия мне не удалось запустить, потому что она дала мне «Мат» не имеет члена с именем «inRange») – George

+0

thx для комментария. Я, вероятно, исправил это. – Micka

+0

: Хорошо, теперь он работает, спасибо. Я хотел спросить, в первой версии, мы можем заполнить whiteArea 'setTo (Scalar (0,0,0));' с значениями мусора? Значения Nan или что-то еще? есть изображение, где я могу делать вычисления? (Я просто спрашиваю сейчас! :)) – George

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