2016-04-06 1 views
1

Je suis nouveau sur OpenCV et j'ai fait un petit POC pour lire une image à partir d'une URL.
Je lis l'image d'une URL en utilisant la capture vidéo. Le code est le suivant:OpenCV: image PNG avec canal alpha

VideoCapture vc; 
vc.open("http://files.kurento.org/img/mario-wings.png"); 
if(vc.isOpened() && vc.grab()) 
{ 
     cv::Mat logo; 
     vc.retrieve(logo); 
     cv::namedWindow("t"); 
     imwrite("mario-wings-opened.png", logo); 
     cv::imshow("t", logo); 
     cv::waitKey(0); 
     vc.release(); 
} 

Cette image n'est pas ouverte correctement, probablement en raison de la couche alpha. Quelle est la façon de préserver le canal alpha et obtenir l'image correctement?

Toute aide est appréciée.
-Merci

Output attendu

Expected output

de sortie réelle

Actual output

Répondre

2

si vous ne chargez une image, je vous recommande d'utiliser imread à la place, aussi, vous devrez spécifier le s Le paramètre econd de imread permet également de charger la couche alpha, c'est-à-dire CV_LOAD_IMAGE_UNCHANGED ou cv::IMREAD_UNCHANGED, en fonction de la version (dans le pire des cas, un -1 fonctionne également). Pour autant que je sache, la classe VideoCapture ne charge pas les images/vidéos avec un 4ème canal. Comme vous utilisez une URL Web, le chargement de l'image ne fonctionnera pas avec imread, mais vous pouvez utiliser n'importe quelle méthode pour télécharger les données (boucle par exemple), puis utiliser imdecode avec le tampon de données pour obtenir le cv::Mat. OpenCV est une bibliothèque pour le traitement d'image, pas pour télécharger des images.

+0

Le nouveau nom est IMREAD_UNCHANGED – Miki

+0

@Miki Je pense que les deux œuvres ... dans les versions plus récentes, pas sûr dans quelle version il a été introduit, alors je ferais mieux de partir à la fois :) – api55

+0

sûr .. Il est juste le nouveau nom – Miki