이미지에서 모든 개체를 가져 오는 방법 색상을 통해 이미지 개체를 분리합니다. 다음 이미지에는 거의 20 색이 있습니다. 벡터 (Vec3b 및 Rect)에서 모든 색상과 위치를 추출하고 싶습니다.Opencv : 분할 된 다채로운 이미지에서 모든 개체 가져 오기
난 내가 객체의 위치를 차별화 할 수 있도록 내가 각 색상 위치를 얻으려면 분할
분할 된 이미지
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을 사용하고 있습니다 . 도와주세요!
입력 이미지와 예상 출력 결과를 제공하십시오. 입력 이미지를 색상으로 세분화하기위한 맞춤 알고리즘을 작성할 필요가 없습니다. Opencv는 같은 작업을 수행하는'kmeans '와 같은 기능을 내장하고 있습니다. – ZdaR
@ZdaR 지금 보시겠습니까 –
https://github.com/christofferholmstedt/opencv-wrapper-egbis –