cvInRangeS函数演示————学习OpenCV笔记(四)

          camshift算法中,用到了cvInRangeS函数,作为初学者,对这个函数很不理解,所以就写了个程序演示效果,加强理解。

代码:

#include "cv.h"
#include "highgui.h"
#include

int hmax=0,hmin=0,vmin=0,vmax=0,smin=0,smax=0;
int main(int argc,char **argv)
{
	printf("此程序将输入的图片由一般的RGB色系转化为HSV色系,然后对图片取掩膜板,\
可以对掩膜板的H、S、V三个元素取不同的范围进行测试并查看, \
效果,拖动滑动条即可选择范围!按 q 键退出测试!\n\n");
	if(argc<=1)
	{
		std::cout<<"Error:Please Load a picture!"<
效果:

cvInRangeS函数演示————学习OpenCV笔记(四)_第1张图片cvInRangeS函数演示————学习OpenCV笔记(四)_第2张图片




cvInRangeS函数演示————学习OpenCV笔记(四)_第3张图片

可以拖动进度条改变范围。


OpenCVchm文档上对函数的解释:

InRangeS
检查数组元素是否在两个数量之间 
void cvInRangeS( const CvArr* src, CvScalar lower, CvScalar upper, CvArr* dst );
src 
第一个原数组 
lower 
包括进的下边界. 
upper 
不包括进的上边界 
dst 
输出数组必须是 8u 或 8s 类型. 
函数 cvInRangeS 检查输入数组元素范围:对于单通道数组: 


dst(I)=lower0 <= src(I)0 < upper0
对于双通道数组以此类推: 


dst(I)=lower0 <= src(I)0 < upper0 &&
lower1 <= src(I)1 < upper1
如果 src(I) 在范围内dst(I)被设置为 0xff (每一位都是 '1')否则置0 。所有的数组必须有相同的大小(或ROI大小) 


个人总结:

         通过程序的演示,这个函数其实没什么特别的,只是为了选取在某个范围之内的像素点出来,并设定为1,其它不在范围内的像素点设为0,没什么特别的。但是这个范围不同,最终效果差别会很大。至于对于camshift算法的作用,我想是为了camshift算法更好更精确的跟踪物体。现在并不知道这个范围该怎么选取,这个问题以后还需要继续探究。

你可能感兴趣的:(OpenCV)