Pourquoi ne openCV est convertto fonction ne fonctionne pas?
J'ai une image qui dispose de 4 canaux et est en 4 * UINT8
format.
Je suis en train de le convertir à 3 canaux à flotteur et je suis en utilisant ce code:
images.convertTo(images,CV_32FC3,1/255.0);
Après la conversion, l'image est dans un format flottant, mais a encore 4 canaux. Comment puis-je me débarrasser de 4ème (alpha) de canal dans OpenCV?
Vous devez vous connecter pour publier un commentaire.
Comme @AldurDisciple dit,
Mat::convertTo()
est destiné à être utilisé pour changer le type de données d'uneMat
, pas pour changer le nombre de canaux.De travail, vous devriez diviser en deux étapes:
1/255.0
? il est utile pour qui ?[0, 255]
à[0, 1]
. VoirMat::convertTo()
s'doc pour plus de détails.La fonction
convertTo
est destiné à être utilisé pour modifier le type de données d'uneMat
, exclusivement. Comme mentionné dans la documentation (lien), le nombre de canaux de l'image de sortie est toujours la même que l'image d'entrée.Si vous souhaitez modifier le type de données et réduire le nombre de canaux, vous devez utiliser une combinaison de
split
,merge
, etconvertTo
:Une autre approche peut être recoder l'algorithme de vous-même, ce qui est assez facile et probablement la plus efficace.
OpenCV est cvtColor fonction vous permet de convertir le type et le nombre de canaux d'un Tapis.
Donc quelque chose comme cela serait de convertir une couleur en 4 canaux pour une couleur de canal 3:
cvtColor(image, image, CV_BGRA2BGR, 3)
;Ou il est probablement plus efficace d'utiliser le mixChannels fonction, si vous consultez la documentation de son exemple montre comment découper un canal de sortie.
Alors si vous voulez vraiment changer pour un type spécifique: