OpenCV prend-il en charge le canal alpha? Ou est-il un moyen de travailler avec png transparent? J'ai besoin de fusionner deux images, où la première est l'arrière-plan et la seconde est l'image qui a été tournée par cvWarpAffine. Je peux le faire en fusionnant les pixels un par un et omettre des pixels avec une certaine valeur, que je définis dans cvScalar dans cvWarpAffine. Cependant, je ne pense pas que cela soit une solution. Merci pour vos suggestionsCanal alpha dans OpenCV
Répondre
OpenCV ne prend pas en charge le canal alpha, seul le masquage. Si vous voulez lire en PNG avec alpha, utilisez ImageMagick premier à extraire le canal alpha:
convert input.png -channel Alpha -negate -separate input-mask.png
Puis, en OpenCV vous pouvez faire qqch comme ceci:
Mat_<float> mask = imread("input-mask.png", 0);
threshold(mask, mask, 254., 1., THRESH_BINARY);
... pour obtenir un vrai masque (utilisable comme matrice de masque dans les opérations OpenCV). Ou vous pouvez l'utiliser dans vos propres opérations sans le seuillage. Pour appliquer le masque, il peut aussi être une bonne idée de l'étendre à trois canaux:
std::vector<Mat> marr(3, mask);
Mat_<Vec<float, 3> > maskRGB;
merge(marr, maskRGB);
Après que vous pouvez le tester comme ceci:
imshow("Target", target);
imshow("Mask", mask*255);
imshow("Applied", target.mul(maskRGB));
waitKey();
Note: Ceci est du code OpenCV 2.0 .
Voici un script bash que j'ai assemblé pour effectuer la conversion ImageMagick donnée par ypnos sur tous les fichiers png d'un répertoire. Vous pouvez le rendre récursif en remplaçant le * dans la troisième ligne par une commande find.
#!/bin/bash
for file in *
do
if [[ $file =~ (.+)-mask\.png ]]; then
echo "Ignoring mask $file"
elif [[ $file =~ (.+)\.png ]]; then
echo "Generating mask for $file"
basefn=${BASH_REMATCH[1]}
convert "$basefn.png" -channel Alpha -negate -separate "$basefn-mask.png"
fi
done
Une excellente contribution! – ypnos
entrée: cam_frame-fond, media_frame-plan, media_frame_alpha - alpha. Sortie: mélangé par alpha transparent. Si media_frame_alpha est IPL_DEPTH_8U, utilisez "cv :: merge", car les matrices doivent avoir une dimension, une taille et des canaux égaux. Travaillez vite si opencv est construit avec sse ou avx. Et plus rapide si vous utilisez cv: GpuMat, vous devez avoir le support nvidia cuda et construire opencv avec cuda.
inline cv::Mat frame_mix_alpha(cv::Mat &cam_frame,
cv::Mat &media_frame,
cv::Mat &media_frame_alpha)
{
Mat suba = media_frame_alpha;
//Mat alpha = cvCreateImage(media_frame_alpha.size(), IPL_DEPTH_8U, 1);
//cvtColor(media_frame_alpha, alpha, CV_BGR2GRAY);
//Mat suba;
//Mat rgba[3] = { alpha, alpha, alpha };
//merge(rgba, 3, suba);
Mat subb = ~suba;
//Mat mincam = min(cam_frame, suba);
//Mat minmedia = min(media_frame, subb);
//Mat result = (cam_frame - mincam) + (media_frame - minmedia);
Mat result = (cam_frame - suba) + (media_frame - subb);
return result;
}
- 1. canal Alpha dans IE 6.x
- 2. Effacer le canal alpha d'un NSImage
- 3. redimensionnement d'une image avec canal alpha
- 4. Comment obtenir une vignette de dossier avec canal alpha
- 5. Représentation hexadécimale d'une couleur avec un canal alpha?
- 6. Inscriber Technology Via Builder et Delphi - Support du canal Alpha
- 7. Comment puis-je sortir une image du presse-papiers sans perdre le canal alpha dans .NET?
- 8. Comment puis-je dessiner une image avec un canal alpha défini par programme dans .NET?
- 9. OpenCV 1.1 Erreur Mac OS X 10.5.7 "Impossible de créer un canal vidéo"
- 10. Howe puis-je récupérer l'image correcte avec le canal alpha correct à partir de QMimeData?
- 11. Comment détecter par programme si un bitmap a un canal alpha?
- 12. Comment créer un bitmap avec un canal alpha à la volée en utilisant GDI?
- 13. Comportement étrange avec OpenCV
- 14. Opencv Extraction de bords
- 15. DirectX et OpenCV
- 16. fond une alpha dans IE
- 17. Comment définir alpha dans R?
- 18. Composant Alpha Blanket dans GDI +
- 19. New PythonInterface for OpenCV
- 20. OpenCV lib et WM
- 21. Python OpenCV - OS X
- 22. OpenCV sur Embedded Platform
- 23. Création de fichiers AVI dans OpenCV
- 24. WCF canal Callback
- 25. Priorisation des entrées de canal dans Retlang
- 26. Qt + OpenCV + eclipse (sur windows)
- 27. OpenCV highgui110.dll Lien Erreur
- 28. Convertir ALPHA-2 en ALPHA-3 en C# ASP.net
- 29. UISlider alpha question
- 30. Autoriser * dans l'expression régulière pour alpha-numérique
Ceci est l'une des questions les plus anciennes sur ce sujet et attire toujours de nombreux visiteurs. Voici une [réponse plus récente] (https://stackoverflow.com/a/49180468/176769) si vous cherchez du code. – karlphillip