2014-03-27 30 views
1

我是opencv的新手,我在windows7U(64位)上使用opencv2.4.5和VS10C++。我的項目是在範圍140到160之間的閾值過程之後顯示圖像,但是我最後一行是掛斷線如何在opencv中的多個範圍之間的閾值

下面是我的代碼;

int main(int argc, char* argv[]) 
{ 
    //open the video 
VideoCapture cap2(argv[2]); 
if (!cap2.isOpened()) 
    { 
    cout << "Cannot open the video file" << endl; 
    return -1; 
    } 

//Threshold value of 140 to 160 
    if(cap2.isOpened()) 
{ 
    Mat frame, frame_gray, result; 

    for(;;) 
    { 
     int n; 
     int t1=140, t2=160; 
     n = 255; 

     cap2>>frame; 
     cvtColor(frame, frame_gray, CV_BGR2GRAY); 

     for (int i=0;i<frame_gray.size().height;i++) 
     { 
      for(int j=0;j<frame_gray.size().width;j++) 
      { 
       uchar val; 
       val = frame_gray.at<uchar>(j,i); 
       if (val>t1 && val<t2) 
        {val=255;} 
       else 
        {val=0;} 

       frame_gray.at<uchar>(j,i)=val; 
      } 

如何在過程循環後顯示結果多個範圍閾值?

+2

今後,請發佈其編譯運行的例子,當粘貼複製。此外,你的閾值代碼包含一個錯誤,這是一個段錯誤 - 這可能是由於在手動迭代圖像時產生索引錯誤。 Haris建議使用'inRange()'是一個更好,更不容易出錯的解決方案。 – Aurelius

回答

10

所有你需要的是inRange()這將檢查數組元素是否位於兩個其他數組的元素之間。

所以更改您的代碼

Mat thr; 
inRange(frame_gray, Scalar(140),Scalar(160),thr); 
imshow("processed",thr); 
waitKey(); 
+0

非常感謝,我非常感謝你的回答。它有用 – shshadi

+0

不客氣.... – Haris