2013-07-04 3 views
1

단일 웹캠을 통해 동시에 여러 색상의 여러 객체를 추적하려고합니다. 이제 단일 임계 값을 사용하여 단일 색상으로 할 수 있습니다.다양한 임계 값

IplImage* GetThresholdedImage(IplImage* imgHSV) 
{  
    IplImage* imgThresh=cvCreateImage(cvGetSize(imgHSV),IPL_DEPTH_8U, 1); 
    cvInRangeS(imgHSV, cvScalar(170,160,60), cvScalar(180,2556,256), imgThresh); 
    return imgThresh; 
} 

다양한 임계 값을 수행 할 힌트가 있습니다. 또한 가능한 경우 얼마나 많은 창이 필요합니까? 다른 색상에 대해 다른 창을 지정해야합니까?

+1

가장 쉬운 방법이 각 색상에 대한 역치 이미지를 만드는 것입니다 당신은 추적하고 싶다. 'GetThresholdedImage()'를 수정하여 상한과 하한에 대해'cvScalar' 인수를 취한 다음 각 객체에 대해 한 번 호출 할 수 있습니다. – Aurelius

+0

약간 구체적 일 수 있습니까? – yxing

+0

오류 : "cvScalar"함수가 형식 이름이 아닙니까? – yxing

답변

0

가장 쉬운 방법은 추적하려는 각 색상에 대한 임계 값 이미지를 만드는 것입니다. 임계 값 범위를 하드 코딩하는 대신 함수를 수정하여 매개 변수로 사용할 수 있습니다. 이렇게하면 다른 객체에 대해 함수를 다시 사용할 수 있습니다. 다른 개체에 대해 서로 다른 임계 값을 사용하여 호출 후

IplImage* GetThresholdedImage(IplImage* imgHSV, CvScalar lower, CvScalar upper) 
{  
    IplImage* imgThresh=cvCreateImage(cvGetSize(imgHSV),IPL_DEPTH_8U, 1); 
    cvInRangeS(imgHSV, lower, upper, imgThresh); 
    return imgThresh; 
} 

을 그리고 :

수정 된 기능은 다음과 같을 수

IplImage* hsv; /* Already initialized*/ 

/* Set thresholds for blue and green objects as an example. */ 
/*Obviously, set these to be whatever is necessary. */ 
CvScalar blue_lower = cvScalar(110,60,10); 
CvScalar blue_upper = cvScalar(120,256,256); 
CvScalar green_lower = cvScalar(40,60,10); 
CvScalar green_upper = cvScalar(71,256,256); 

/* Get the images thresholded for blue and green. */ 
IplImage* blue_mask = GetThresholdedImage(hsv, blue_lower, blue_upper); 
IplImage* green_mask = GetThresholdedImage(hsv, green_lower, green_upper);