[Comprendre] opencv fonction mixChannels ()

mixChannels fonction () appréciée

mixChannels () est une fonction liée à des canaux de traitement d'image peuvent être mis en œuvre sous forme de combinaison de canal complexe

1. prototype de fonction

Fonction Prototype 1.1 (a)

void cv::mixChannels	(	
	InputArrayOfArrays 	src,
	InputOutputArrayOfArrays 	dst,
	const std::vector< int > & 	fromTo 
)	

Le premier paramètre: matrice d' entrée
du second argument: une matrice de sortie de
la troisième paramètre: la liste de réplication, montrant plusieurs canaux de la première copie de la matrice d'entrée à la seconde sortie de matrice de plusieurs canaux
tels que {0,2,1,1, représente 2,0}:
la src à des canaux de couleur de copie dst 0 2 canaux de couleurs
du src de canal de couleur de canal de couleur dst 1 1 copie
du src de canal de couleur de canal de couleur de copie dst 2 0

FIG:
Insérer ici l'image Description
Il convient de noter que la structure de la matrice d'entrée et une matrice de sortie doit être prédéfini.

1.2 Fonction Prototype (II)

void cv::mixChannels	
(	
	const Mat * 	src,
	size_t 	nsrcs,
	Mat * 	dst,
	size_t 	ndsts,
	const int * 	fromTo,
	size_t 	npairs 
)	

Le premier paramètre: matrice d' entrée
du second argument: le nombre de la matrice d'entrée de
la troisième paramètre: la matrice de sortie
quatrième paramètre: le nombre de matrice de sortie
cinquième paramètre: liste réplication
liste des numéros de copie: sixième paramètre

Dans ce prototype de fonction, si la matrice d'entrée et de la matrice de sortie sont écrits à 1, tout comme le premier prototype est compatible avec la fonction.
Sinon 1, peut être obtenue et l' assemblage matrice ou une pluralité de matrice dans la matrice de multiples fonctions complexes.

La figure 2 illustre

2.1 change de canal de couleur

Voici un prototype de fonction en utilisant le premier exemple décrit, depuis une matrice à trois canaux est définie, et les canaux 0 et 2 sont permutées

Mat m(500, 500, CV_8UC3, Scalar(255, 255, 0));
	Mat m2(500, 500, CV_8UC3);
	vector<Mat> channels;
	split(m, channels);
	imshow("m", m);
	imshow("0", channels.at(0));
	imshow("1", channels.at(1));
	imshow("2", channels.at(2));

	vector<int> fromTo = {0,2,1,1,2,0};
	mixChannels(m, m2, fromTo);
	vector<Mat> channels2;
	split(m2, channels2);
	imshow("/m", m2);
	imshow("/0", channels2.at(0));
	imshow("/1", channels2.at(1));
	imshow("/2", channels2.at(2));
	waitKey(0);

Avant l'échange:

Insérer ici l'image Description
Insérer ici l'image Description

Après l'échange:
Insérer ici l'image DescriptionInsérer ici l'image Description

2,2 matrice de segmentation Quad

Pour une fonction de matrice de canal en utilisant quatre mixChannels () est divisé en une matrice à canal unique à trois canaux et d'une matrice, et a une relation de correspondance:

// bgra[0] -> bgr[2], bgra[1] -> bgr[1],
// bgra[2] -> bgr[0], bgra[3] -> alpha[0]

	Mat bgra(500, 500, CV_8UC4, Scalar(255, 0, 0, 255));
	Mat bgr(bgra.rows, bgra.cols, CV_8UC3);
	Mat alpha(bgra.rows, bgra.cols, CV_8UC1);
	

	Mat out[] = { bgr,alpha };
	int fromTo[] = { 0, 2, 1, 1, 2, 0, 3, 3 };
	
	mixChannels(&bgra, 1, out, 2, fromTo, 4);
	imshow("bgra", bgra);
	imshow("bgr", bgr);
	imshow("alpha", alpha);
	
	

Le résultat:
Insérer ici l'image Description

références

[1] OpenCV mixChannels () Explication: segmentation de l'image à 4 canaux, le canal d'acquisition HSV http://www.pianshen.com/article/4148149685/

Publié 14 articles originaux · louange gagné 1 · vues 499

Je suppose que tu aimes

Origine blog.csdn.net/qq_41741344/article/details/104370450
conseillé
Classement