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 47 48 49 50
| #include <iostream>
#include "highgui.h"
#include "cv.h"
void main()
{
IplImage* src;
IplImage* dst1, *dst2;
src=cvLoadImage("c://temp/test.bmp",1);
//destination à un canal (dst1)
cvSetImageCOI(src,3); //se fixe sur le canal rouge
dst1 = cvCreateImage(cvGetSize(src),8,1); // création de la destination (1 canal)
cvSet(dst1,cvScalar(0,0,0)); //remplissage de l'image dst1 à noir
cvCopy(src,dst1); //copie du plan rouge de src vers dst1
cvSetImageCOI(src,0); //on considère de nouveau tous les plans de src
cvNamedWindow("source",1);// affichage
cvShowImage("source",src);
cvNamedWindow("destination1",1);
cvShowImage("destination1",dst1);
cvWaitKey();
cvDestroyWindow("source");
cvDestroyWindow("destination1");
//destination à trois canaux (dst2)
cvSetImageCOI(src,3); //se fixe sur le canal rouge
dst2 = cvCreateImage(cvGetSize(src),8,3); // création de la destination (3 canaux)
cvSet(dst2,cvScalar(0,0,0)); //remplissage de l'image dst2 à noir
cvSetImageCOI(dst2,3); //se fixe sur le canal rouge
std::cout<<"canal sélectionné : "<<cvGetImageCOI(dst2)<<std::endl;
//cvCopy(src,dst2); //copie du plan rouge de src vers le plan rouge de dst2 (bad number of channels dans cvSplit)
cvSetImageCOI(src,0); //on considère de nouveau tous les plans de src
cvSetImageCOI(dst2,0); //on considère de nouveau tous les plans de dst2
cvNamedWindow("source",1); // affichage
cvShowImage("source",src);
cvNamedWindow("destination2",1);
cvShowImage("destination2",dst2);
cvWaitKey();
cvDestroyWindow("source");
cvDestroyWindow("destination2");
cvReleaseImage(&src);
cvReleaseImage(&dst1);
cvReleaseImage(&dst2);
} |
Partager