强度切片opencv(与kinect)

时间:2012-03-21 14:17:43

标签: java image-processing opencv javacv

我想在2张灰色图像之间分割图像的一部分(视频流)。

当流开始时,我拍摄图像。然后我制作另一个IplImage但是每个像素的强度都加一个数字。现在我想保留这两张图片之间的所有内容。

我的代码atm

 // 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个阈值图像是:depthInit和depthInitLayer2

流是变量“result”

现在使用这两个图像来限制流

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 个答案:

答案 0 :(得分:1)

方法" 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)