2014-01-18 2 views
0

도서관 OpenCV에 대한 도움을 요청하고 싶습니다. 나는 그림에서 색깔이있는 부분을 찾는 가장 좋은 방법을 안다면 물어보고 싶다. 예를 들어, tshirt의 "더러운 부분"크기를 계산할 수있는 응용 프로그램을 만들어야합니다. 갈색 티셔츠가 있고 어미 나 다른 것이 만든 더러운 곳이 있다고 가정 해 봅시다.OpenCV : 착색 된 점이 발견되었습니다.

나에게 알고리즘이나 기술을 추천 해 주시겠습니까? 아니면 튜토리얼?

나는 도움을 요청하지 않지만 시간이 없어서 아마도 그 문제를 전에 만난 것입니다.

대단히 감사합니다.

답변

0

openCV 샘플 코드 (cpp 샘플 섹션 아래)에서 "bgfg_segm.cpp"라는 .cpp 파일을 찾을 수 있습니다. 그 코드는 모션 추적을위한 것이지만 나는 또한 당신이 그 반점을 탐지하는데 사용할 수 있다고 생각한다.

"스페이스 바 키"를 누르면 배경 업데이트를 시작/중지 할 수 있습니다. 일단 당신이 당신의 배경을 결정하면, 여분의 것이 그것의 자리로 감지 될 것입니다.

전략 : 웹캠 앞면의 천을 가져온 다음 배경으로 선택하고 "스페이스 바 키"를 눌러 배경에서의 변경을 중지하십시오. 그런 다음 프로그램이 옷감의 색상 변화를 추적 할 수 있어야합니다.

코드는 다음과 같습니다 :

#include "opencv2/core/core.hpp" 
#include "opencv2/imgproc/imgproc.hpp" 
#include "opencv2/video/background_segm.hpp" 
#include "opencv2/highgui/highgui.hpp" 
#include <stdio.h> 

using namespace std; 
using namespace cv; 

int main() 
{ 

    VideoCapture cap; 
    bool update_bg_model = true; 

    cap.open(0); 

    namedWindow("image", CV_WINDOW_NORMAL); 
    namedWindow("foreground mask", CV_WINDOW_NORMAL); 
    namedWindow("foreground image", CV_WINDOW_NORMAL); 
    namedWindow("mean background image", CV_WINDOW_NORMAL); 

    // Declare "object " of class "BackgroundSubtractorMOG2" 
    BackgroundSubtractorMOG2 bg_model;//(100, 3, 0.3, 5); 

    Mat img, fgmask, fgimg; 

    for(;;) 
    { 
     cap >> img; 

     if(fgimg.empty()) 
      fgimg.create(img.size(), img.type()); 

     //update the model 
     bg_model(img, fgmask, update_bg_model ? -1 : 0); // "bg_model" is object of class "BackgroundSubtractorMOG2" as declared above. 

     fgimg = Scalar::all(0); 
     img.copyTo(fgimg, fgmask); 

     Mat bgimg; 
     bg_model.getBackgroundImage(bgimg); 

     imshow("image", img); 
     imshow("foreground mask", fgmask); 
     imshow("foreground image", fgimg); 
     if(!bgimg.empty()) 
      imshow("mean background image", bgimg); 

     char k = (char)waitKey(30); 
     if(k == 27) break; 
     if(k == ' ') // Change the Background updation status by Spacebar key 
     { 
      update_bg_model = !update_bg_model; // initially "bool update_bg_model = true" 
      if(update_bg_model) 
       printf("Background update is on\n"); 
      else 
       printf("Background update is off\n"); 
     } 
    } 

    return 0; 
}