2016-12-26 1 views
1

이미지에서 모든 개체를 가져 오는 방법 색상을 통해 이미지 개체를 분리합니다. 다음 이미지에는 거의 20 색이 있습니다. 벡터 (Vec3b 및 Rect)에서 모든 색상과 위치를 추출하고 싶습니다.Opencv : 분할 된 다채로운 이미지에서 모든 개체 가져 오기

난 내가 객체의 위치를 ​​차별화 할 수 있도록 내가 각 색상 위치를 얻으려면 분할

Input Image

분할 된 이미지

enter image description here

Mat src, dst; 
    String imageName("/home/pathToImage.jpg"); 
    src = imread(imageName,1); 
    if(src.rows < 1) 
     return -1; 
    for(int i=0; i<src.rows; i=i+5) 
    { for(int j=0; j<src.cols; j=j+5) 
     { 
      Vec3b color = src.at<Vec3b>(Point(i,j)); 
      if(colors.empty()) 
      { 
       colors.push_back(color); 
      } 
      else{ 
       bool add = true; 
      for(int k=0; k<colors.size(); k++) 
      { 
       int  rmin = colors[k].val[0]-5, 
        rmax = colors[k].val[0]+5, 
        gmin = colors[k].val[1]-5, 
        gmax = colors[k].val[1]+5, 
        bmin = colors[k].val[2]-5, 
        bmax = colors[k].val[2]+5; 
       if((
         (color.val[0] >= rmin && color.val[0] <= rmax) && 
         (color.val[1] >= gmin && color.val[1] <= gmax) && 
         (color.val[2] >= bmin && color.val[2] <= bmax)) 

       ) 
       { 
        add = false; 
        break; 
       } 

      } 
      if(add) 
       colors.push_back(color); 

      } 
     } 
    } 
    int size = colors.size(); 
    for(int i=0; i<colors.size();i++) 
    { 
     Mat inrangeImage; 
     //cv::inRange(src, Scalar(lowBlue, lowGreen, lowRed), Scalar(highBlue, highGreen, highRed), redColorOnly); 
     cv::inRange(src, cv::Scalar(colors[i].val[0]-1, colors[i].val[1]-1, colors[i].val[2]-1), cv::Scalar(colors[i].val[0]+1, colors[i].val[1]+1, colors[i].val[2]+1), inrangeImage); 
     imwrite("/home/kavtech/Segmentation/1/opencv-wrapper-egbis/images/inrangeImage.jpg",inrangeImage); 
    } 
    /// Display 
    namedWindow("Image", WINDOW_AUTOSIZE); 
    imshow("Image", src); 
    waitKey(0); 

에 대한 egbis algorithum을 사용하고 있습니다 . 도와주세요!

+0

입력 이미지와 예상 출력 결과를 제공하십시오. 입력 이미지를 색상으로 세분화하기위한 맞춤 알고리즘을 작성할 필요가 없습니다. Opencv는 같은 작업을 수행하는'kmeans '와 같은 기능을 내장하고 있습니다. – ZdaR

+0

@ZdaR 지금 보시겠습니까 –

+0

https://github.com/christofferholmstedt/opencv-wrapper-egbis –

답변

0

그저 사소한 데이터 형식 문제입니다. 20 가지가 넘는 색상으로 트루 컬러 이미지를 컬러 색인 이미지로 변환하려고합니다.

이미지를 단계별로 살펴보고 성장하는 사전에서 색상을 찾아 각 픽셀에 정수 0-20을 지정하십시오.

이제는 한 색상이 설정되고 나머지는 선명하다는 말을 사용하여 이미지를 이진 이미지로 변환 할 수 있으며 사각형 맞추기에 표준 알고리즘을 사용합니다.

+0

소스 코드 또는 예제를 공유 할 수 있습니까? –

관련 문제