2016-12-26 45 views
1

如何從圖像中獲取所有對象我通過顏色分離圖像對象。 下圖中有近20種顏色。我想提取所有顏色和它們在矢量中的位置(Vec3b和Rect)。Opencv:從分段彩色圖像獲取所有對象

我使用egbis algorithum進行分割

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); 

我想每個顏色位置,以便 我能夠區分物體的位置。請幫忙!

+0

請提供輸入圖像和預期的輸出結果,您不需要編寫自定義算法來分割輸入圖像的顏色,Opencv有一些內置的功能,如'kmeans'來做同樣的事情。 – ZdaR

+0

@ZdaR請參閱 –

+0

我使用的是https://github.com/christofferholmstedt/opencv-wrapper-egbis –

回答

0

這只是一個微不足道的數據格式問題。您只需將20種左右顏色的真彩色圖像轉換爲彩色索引圖像。

因此,只需簡單地瀏覽一下圖像,在增長的字典中查找顏色,然後爲每個像素分配0-20的整數。

現在,您可以簡單地將圖像轉換爲二進制圖像,只需說明一種顏色已設置,其餘部分已清除,並使用標準算法進行擬合矩形。

+0

您可以共享源代碼或任何示例? –