OpenCV: comment définir la transparence alpha d'un pixel
J'ai une image que je suis en train de segment par la coloration de chaque pixel soit rouge, vert ou bleu. J'ai calculé un score de confiance pour chaque pixel et pour régler la transparence alpha du pixel afin de refléter la confiance, c'est à dire le faible niveau de confiance signifie presque transparent. Est-il un moyen de le faire dans OpenCV? Si non quelqu'un peut-il suggérer un mini-invasive de la bibliothèque C++ (C++)?
J'ai tente à l'aide d'un 4 canaux 8 bits Mat
comme suggéré par Aurellius, voici le code:
cv::Mat m = cv::Mat(20,20, CV_8UC4);
for(int i = 0; i < m.rows; i++){
for(int j = 0; j < m.cols; j++){
Vec4b& v = m.at<Vec4b>(i,j);
v[0] = 255;
v[1] = 0;
v[2] = 0;
v[3] = 0.5;
}
}
imwrite("alpha.png", m);
namedWindow("m");
imshow("m", m);
waitKey(0);
L'image affichée est juste tout bleu (pas de transparence) et l'image juste totalement transparent.
OriginalL'auteur Aly | 2013-04-24
Vous devez vous connecter pour publier un commentaire.
Il y a beaucoup de façons de le faire. Une façon est d'accès et de modification à chaque pixel. En supposant que
image
est une quatre-voies, 8-bitcv::Mat
:où
i
etj
sont les indices du pixel dans l'image.Il existe d'autres méthodes qui sont probablement plus élégant, mais ils dépendent de votre code actuel.
Mise à JOUR:
Le comportement que vous décrivez est à prévoir. Apparemment
cv::imshow()
ne prend pas en charge la transparence. C'est ce qui explique pourquoi votre image affichée est tout bleu.Comme pour l'image enregistrée, il est important de se rappeler que l'image est de type
CV_8UC4
. Cela signifie que chaque élément de la chaine est stocké comme unuchar
. L'attribution d'une valeur de0.5
sera tronquée à zéro, d'où le totalement transparente de l'image enregistrée.Si votre confiance est une valeur flottante dans la gamme
[0,1]
, mise à l'échelle par 255 pour les mettre dans la plage prise en charge par les images 8 bits. Ainsi,devient
J'ai essayé cette réponse et cela a fonctionné.
OriginalL'auteur Aurelius
J'ai aussi eu le même problème mais quand le dessin transparent formes et résolu par fusion d'images.
Je l'ai retrouvée ce dans OpenCV la documentation de
Pour ce faire, je vous suggère de jeter un oeil à cette documentation de l'article. Espérons que cela aidera.
OriginalL'auteur andriy