Salut ce que j'ai est un couple de Mat
que je veux superposer (dans un ordre personnalisé). Le Mat
contient des polygones opencv (ce qui signifie beaucoup de transparence). Ce Mat
j'ai besoin de superposer/fusionner. Mais pas avec l'alpha classique qui se mélange plus avec une opacité à 100% mais avec de la transparence.OpenCv overlay deux Mat (dessins pas images) avec transparence
Ceci est un simple exemple de code de ce que je veux fusionner.
Mat m1, m2;
m1.create(Point{ 100,100 }, CV_8UC4);
m2.create(Point{ 100,100 }, CV_8UC4);
cv::polylines(m1, std::vector<Point>{ Point{ 2,20 },Point{ 20,40 } }, true, Scalar(6, 6, 255));
cv::polylines(m2, std::vector<Point>{Point{ 100,100 }, Point{ 0,0 } }, true, Scalar(192, 112, 0));
S'il vous plaît noter que je ne peux pas dessiner les polygones directement dans un Mat
pour diverses raisons.
Je pensais que peut-être m1.copyTo(m2);
fonctionnera, mais tout son remplaçant (y compris. Fond noir)
Toute idée comment l'obtenir fusionné/prochaine sans l'arrière-plan? Puis-je construire le mauvais problème?
Créer un masque des morceaux que vous souhaitez copier (je suppose que tout ce qui est pas noir), et ensuite utiliser 'copyTo' avec ce masque. –
@ DanMašek savez-vous une fonction intelligente pour détecter le noir/tout en plus du noir? J'ai essayé 'cv :: threshold (m1, m1, 1, 255, cv :: THRESH_BINARY);' mais ça ne marche pas très bien. – user1234
ajouter des exemples d'images des dessins. – Micka