Voici comment je résoudre votre problème:
- Je trouve tous les pixels nécessaires en utilisant
inRange
. Après cela, j'ai trouvé tous les contours.
- Ensuite, j'ai construit gros contour de tous ces contours.
- Enfin, trouvé
boundingRect
de ce grand contour et dessinez-le.
Voici un code C++:
Mat src = imread("image.jpg"), mask;
const Scalar minScalar = Scalar(200, 200, 200);
const Scalar maxScalar = Scalar(255, 255, 255);
inRange(src, minScalar, maxScalar, mask);
vector<vector<Point2i> > contours;
findContours(mask, contours, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);
vector<Point2i> bigContour;
for (int i=0; i<contours.size(); i++)
{
for (int j=0; j<contours[i].size(); j++)
{
bigContour.push_back(contours[i][j]);
}
}
Rect rect = boundingRect(bigContour);
rectangle(src, rect, Scalar(255, 0, 255));
imshow("Image", src);
waitKey();
Je ne comprends pas exactement comment vous voulez placer votre rectangle, comment votre rectangle ressembler si un pixel sur deux a une valeur supérieure à (200.200.200)? –
Ou voulez-vous créer un rectangle entourant tous les points ayant une valeur supérieure à (200,200,200)? –