**The mistake is vector subscript out of range , I don't know how to change it to right. please help me~thanks**
void bo_lb(Mat &image, Mat & outputimage, int &count) {
int value = 0;
std::vector < vector> blob;
std::vector::iterator itr;
for (int y = 1; y < image.rows - 1; y++)
{
for (int x = 1; x < image.cols - 1; x++)
{
value = Mpixel(image, x, y);
if (value == 255) {
int topvalue = Mpixel(image, x-1, y );
int leftvalue = Mpixel(image, x , y-1);
if (topvalue > 0 && leftvalue > 0)
{
if (topvalue == leftvalue) {
vector&set = blob[leftvalue];
set.push_back(Point2i(x, y));
value = leftvalue;
}
else
{
vector&set2 = blob[leftvalue];
set2.push_back(Point(x, y));
value = leftvalue;
vector&set1 = blob[topvalue];
if (set1.size() != 0)
{
for (itr = set1.begin(); itr != set1.end(); itr++) {
value = leftvalue;
}
set2.insert(set2.end(), set1.begin(), set1.end());
set1.clear();
}
}
}
else if (topvalue == 0 && leftvalue == 0)
{
vector vec;
vec.push_back(Point2i(x, y));
blob.push_back(vec);
value = blob.size() - 1;
}
else if (topvalue == 0 && leftvalue > 0)
{
vector set = blob[leftvalue];
set.push_back(Point(x, y));
value = leftvalue;
}
else if (topvalue > 0 && leftvalue == 0) {
vector&set = blob[topvalue];
set.push_back(Point(x, y));
value = topvalue;
}
}
}
}
int cout = 0;
vector< vector>::iterator itr1;
for (itr1 = blob.begin(); itr1 != blob.end(); itr1++) {
vector vec = *itr1;
if (vec.size() == 0) {
continue;
}
unsigned char r = rand() % 255;
unsigned char g = rand() % 255;
unsigned char b = rand() % 255;
for (itr = vec.begin(); itr != vec.end(); itr1++) {
int x = itr->x;
int y = itr->y;
CB(image, x, y) = b;
CG(image, x, y) = g;
CR(image, x, y) = r;
}
cout++;
}
count = cout;
}
↧