1
如何從圖像中獲取所有對象我通過顏色分離圖像對象。 下圖中有近20種顏色。我想提取所有顏色和它們在矢量中的位置(Vec3b和Rect)。Opencv:從分段彩色圖像獲取所有對象
我使用egbis algorithum進行分割
分割圖像
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);
我想每個顏色位置,以便 我能夠區分物體的位置。請幫忙!
請提供輸入圖像和預期的輸出結果,您不需要編寫自定義算法來分割輸入圖像的顏色,Opencv有一些內置的功能,如'kmeans'來做同樣的事情。 – ZdaR
@ZdaR請參閱 –
我使用的是https://github.com/christofferholmstedt/opencv-wrapper-egbis –