2013-02-19 54 views
0

我已經開始學習opencv,並且已經編寫了下面的代碼來獲取hsv和inRange圖像中圖像的輸出(來自輸入相機)! hsv輸出很好,但inRange o/p只是空白: plz幫助難倒inRange查詢圖像輸出

int main(int argc[], char** argv[]) 
    { 
VideoCapture camera(CV_CAP_ANY); 
Mat input; 
Mat output(Size(input.size().height,input.size().width),input.type()); 
Mat img_thresh(Size(640,480),input.type()); 

namedWindow("input",0); 
namedWindow("output",0); 
namedWindow("threshold",0); 

cv::Scalar hsv_min = cvScalar(0, 30, 80, 0); 
    cv::Scalar hsv_max = cvScalar(20, 150, 255, 0); 

for(;;) 
{ 
    camera >> input; 

    cvtColor(input,output,CV_BGR2HSV,1); 
    cv::inRange(input,hsv_min,hsv_max,img_thresh); 

    imshow("input",input); 
    imshow("output",output); 
    imshow("threshold",img_thresh); 

    cv::waitKey(40);  
} 

return 0; 

}

+0

您的代碼在我的電腦工作。嘗試使用不同的hsv_min和hsv_max值。 – Haris 2013-02-19 12:14:02

+0

確定ty將嘗試:)哦,並且你可以只發布屏幕快照:)的inRange輸出? ! – 2013-02-21 06:31:19

回答

0

您應用INRANGE功能輸入BGR圖像。您必須將其應用於HSV圖像,在代碼中將其命名爲output。所以行應該是:

cv::inRange(output,hsv_min,hsv_max,img_thresh); 

你的代碼工作,但你沒有使用正確的圖像!

如果你想知道你的形象HSV值,我建議你使用:

cvSetMouseCallback("input", getObjectColor); 

和:

void getObjectColor(int event, int x, int y, int flags, void *param = NULL) { 

    // Vars 
    CvScalar pixel; 
    IplImage *hsv; 

    if(event == CV_EVENT_LBUTTONUP) { 

     // Get the hsv image 
     hsv = cvCloneImage(image); 
     cvCvtColor(image, hsv, CV_BGR2HSV); 

     // Get the selected pixel 
     pixel = cvGet2D(hsv, y, x); 
     cvShowImage("getObjColor", hsv); 
     // Change the value of the tracked color with the color of the selected pixel 
     h = (int)pixel.val[0]; 
     s = (int)pixel.val[1]; 
     v = (int)pixel.val[2]; 
     cout << "Color HSV = h:" << pixel.val[0] << " | s:" << pixel.val[1] << " | v:" << pixel.val[2] << endl; 

     // Release the memory of the hsv image 
      cvReleaseImage(&hsv); 
    } 
} 

您需要創建一些變量,使這項工作,代碼是從互聯網(不記得在哪裏!)