интенсивность нарезки opencv (с помощью kinect) - PullRequest
1 голос
/ 21 марта 2012

Я хотел бы сегментировать часть изображения (видеопоток) между 2 серыми изображениями.

Когда начинается поток, я беру изображение. Затем я делаю еще один IplImage, но где интенсивность каждого пикселя добавляется числом. Теперь я хотел бы сохранить все между этими двумя изображениями.

Мой код атм

 // Get the initial image 
 depthInit.copyFrom(result.getBufferedImage());  

 //Create an image where every intensity is 10, which will be added to the initial image.
 cvSet(scalarImage,cvScalar(10, 0, 0, 0));

 // De init image wordt verhoogt met de hoogte van de laag 
 cvAdd(depthInit, scalarImage, depthInitLayer2, null);

2 пороговых изображения: deepInit и deepInitLayer2

Поток - это переменная "result"

Теперь, чтобы использовать эти 2 изображения для порога потока

cvZero(difference);

// Select everything that is greater than the depthInit image
cvCmp(result, depthInit, difference, CV_CMP_GT);


cvZero(difference2);

// Select everything that is smaler than the depthInitLayer2 
cvCmp(difference, depthInitLayer2, difference2, CV_CMP_LT);

Хотя, к сожалению, это не работает.

Мой вопрос, почему?

Спасибо заранее

1 Ответ

1 голос
/ 23 марта 2012

Метод "inrange" с помощью opencv делает свое дело. В моем случае (с некоторыми переименованными переменными)

 cvInRange(result, threshold1, threshold2,  difference2);

Результаты 1 пиксель в потоке (вывод):

Stream value (189.0, 0.0, 0.0, 0.0)
threshold1 value (187.0, 0.0, 0.0, 0.0)
threshold2 value (217.0, 0.0, 0.0, 0.0)
After thresholding value (255.0, 0.0, 0.0, 0.0)

Этот пиксель с интенсивностью 189 находится в интервале [217,187], поэтому он получает 255 (белый)

С другой стороны, этот пиксель с интенсивностью 240 не находится в интервале, поэтому получает 0

Stream value (240.0, 0.0, 0.0, 0.0)
threshold1 value (187.0, 0.0, 0.0, 0.0)
threshold2 value (217.0, 0.0, 0.0, 0.0)
After thresholding value (0.0, 0.0, 0.0, 0.0)
...