Comment faire pour convertir un 16 bits à 8 bits de l'image dans OpenCV?
J'ai une image en niveaux de gris 16 bits et je veux le convertir en 8 bits en niveaux de gris de l'image dans OpenCV pour python à utiliser avec les différentes fonctions (comme findContours etc.). Est-il possible de le faire en python ou je dois passer à C++?
- En c++ c'est fait avec .convertTo . Peut-être que vous pouvez trouver avec cette information. En outre, si vous souhaitez convertir en binaire (par exemple pour findContours) un simple > 0 opération pourrait faire l'affaire.
- stackoverflow.com/questions/16162227/...
- Même si je change la profondeur de l'image avec les méthodes que vous avez mentionné, OpenCV sera encore traiter l'image comme une image 16 bits.
- désolé, ne peut pas aider avec python openCv. Seulement vous avez une expérience avec c++, openCV.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser numpy conversion méthodes OpenCV mat est un tableau numpy.
Cela fonctionne:
ratio = np.amax(im16) / 256 ; img8 = (im16 / ratio).astype('uint8')
Vous pouvez le faire en Python à l'aide de NumPy par la cartographie de l'image par le biais d'une table de recherche.
+1
pour une réponse, si l'autre est plus rapide 🙂 je me demande si il est possible d'utiliser simplement.clip(lb, ub)
en quelque sorte, puisqu'il gèreNone
bien?lower_bound
etupper_bound
sont à la foisNone
.img.clip(None, None)
soulèveValueError: array_clip: must set either max or min
plt.xlim(None, None)
fonctionne très bien par exemple. OK, je vais garder cela à l'esprit. Merci!Il est vraiment facile à convertir en 8 bits à l'aide de scipy.misc.bytescale. Le OpenCV matrice est un tableau numpy, donc bytescale permettra de faire exactement ce que vous voulez.
bytescale
est obsolète dans SciPy 1.0.0, et sera supprimée dans la version 1.2.0.Code de scipy (aujourd'hui obsolète):
Pour la conversion de 16 bits à 8 bits à l'aide de python openCV: