1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| bool isColorized (IplImage* img, IplImage* binarized_image, int i, int j) {
if (((uchar *)(binarized_image->imageData + (j)*binarized_image->widthStep))[i] == 255) {
CvScalar ddd = cvGet2D (img, j, i);
if (ddd.val[0] == 0 && ddd.val[1] == 0 && ddd.val[2] == 0) {
return true;
}
}
return false;
}
void voisins (IplImage* img, IplImage* binarized_image, int i, int j, CvScalar colour) {
if (isColorized (img, binarized_image, i, j) && (j != 320 && i != 240) && j >= 0) {
cvSet2D (img, j, i, colour);
voisins(img, binarized_image, i, j+1, colour);
voisins(img, binarized_image, i+1, j, colour);
voisins(img, binarized_image, i+1, j-1, colour);
voisins(img, binarized_image, i+1, j+1, colour);
}
}
void convert (IplImage* binarized_image) {
IplImage* hsv_image = cvCreateImage (cvGetSize (binarized_image), binarized_image->depth, 3);
int actuel_couleur = 0;
for (int i=0;i<hsv_image->width;i++) {
for (int j=0;j<hsv_image->height;j++) {
cvSet2D (hsv_image, j, i, cvScalar (0));
}
}
for (int i=0;i<binarized_image->width;i++) {
for (int j=0;j<binarized_image->height;j++) {
if (((uchar *)(binarized_image->imageData + j*binarized_image->widthStep))[i] == 255) {
CvScalar colour = cvScalar (actuel_couleur, 255, 255);
voisins (hsv_image, binarized_image, i, j, colour);
actuel_couleur = (actuel_couleur+10) % 180;
}
}
}
cvCvtColor (hsv_image, hsv_image, CV_HSV2BGR);
cvShowImage ("maskPerso", hsv_image);
cvReleaseImage (&hsv_image);
} |
Partager