|
#include "opencv2/highgui/highgui.hpp"
|
|
#include "opencv2/imgproc/imgproc.hpp"
|
|
#include <iostream>
|
|
#include <stdio.h>
|
|
|
|
using namespace cv;
|
|
using namespace std;
|
|
|
|
int main()
|
|
{
|
|
//cr?ation des matrices
|
|
Mat image, gray, traitement;
|
|
|
|
//entr?e du nom de l'image par l'utilisateur
|
|
string nom;
|
|
cout << "Ecrivez le nom de l'image : template.png\n ";
|
|
cin >> nom;
|
|
|
|
//les informations de l'image sont stock?es dans la matrice image
|
|
image = imread( nom, 1 );
|
|
|
|
if (image.empty())
|
|
{
|
|
cout << "Image cannot be loaded..!!" << endl;
|
|
return -1;
|
|
}
|
|
|
|
cvtColor( image, traitement, CV_BGR2HSV);
|
|
|
|
/*la fonction inRange met ? 0 les valeurs qui ne sont pas
|
|
entre les valeurs dans les deux Scalar.
|
|
Les valeurs 40 et 70 permettent de s?lectionner la couleur verte.
|
|
Cela met ? 0 les valeurs de la matrice traitement qui sont en dehors de l'intervalle [40,70].
|
|
La valeur 90 peut etre diminu?e pour un filtre moins strict,
|
|
ou augment?e pour un filtre plus s?lectif. Elle peut varier de 0 ? 255.
|
|
*/
|
|
inRange(traitement, Scalar(40, 90, 0), Scalar(70, 255, 255), gray);
|
|
|
|
//le flou gaussien permet d'enlever les perturbations
|
|
GaussianBlur( gray, gray, Size(7, 7), 0, 0 );
|
|
|
|
//permet de detecter les contours
|
|
Mat thresh;
|
|
threshold( gray, thresh, 127, 255, 0);
|
|
vector<vector<Point> > contours;
|
|
vector<Vec4i> hierarchy;
|
|
findContours( thresh, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE);
|
|
|
|
//permet de dessiner les contours
|
|
int idx = 0;
|
|
for( ; idx >= 0; idx = hierarchy[idx][0] )
|
|
{
|
|
//la valeur 9 correspond ? l'?paisseur des contours
|
|
drawContours( image, contours, idx, Scalar(0,255,0), 9, 8, hierarchy );
|
|
}
|
|
|
|
|
|
// affiche le r?sultat
|
|
namedWindow( "Detection", CV_WINDOW_AUTOSIZE );
|
|
imshow( "Detection", image);
|
|
|
|
// cree une image resultat
|
|
imwrite( "resultat.png", image);
|
|
|
|
waitKey(0);
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|