2014-03-27 2 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

에 코드를 변경, 컴파일 예제 및 실행을 게시하시기 바랍니다. 또한 thresholding 코드에는 segfaults라는 버그가 있습니다. 이는 수동으로 이미지를 반복하는 동안 인덱싱 오류가 발생할 가능성이 높습니다. Haris가'inRange()'를 사용 하자는 제안은 훨씬 더 좋으며 에러가 발생하기 쉬운 솔루션입니다. – Aurelius

답변

10

여러분이 필요로하는 것은 inRange()입니다.이 배열은 배열 요소가 다른 두 배열의 요소 사이에 있는지 검사합니다. 복사 붙여 넣기 할 때

그래서 앞으로

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

정말 고맙습니다. 정말 감사드립니다. 그것 유용하다 – shshadi

+0

당신은 환영 받다. – Haris