web-dev-qa-db-fra.com

Puis-je déterminer le nombre de canaux en cv :: Mat Opencv

C'est peut-être rudimentaire, mais est-il possible de savoir combien de canaux un cv::Mat a? Par exemple, nous chargeons une image RVB, je sais qu'il y a 3 canaux. Je fais les opérations suivantes, juste pour obtenir le laplacien de l'image, qui est directement de la documentation Opencv.

int main(int argc, char **argv)
{
     Mat src = imread(argv[1],1),src_gray,dst_gray,abs_dst_gray;

     cvtColor(src,src_gray,COLOR_BGR2GRAY);
     GaussianBlur( src, src, Size(3,3), 0, 0, BORDER_DEFAULT );
     Laplacian(src_gray,dst_gray,ddepth,kernel_size,scale,delta,BORDER_DEFAULT);
     convertScaleAbs(dst_gray,abs_dst_gray);
}

Après la conversion en niveaux de gris, nous ne devrions avoir qu'un seul canal. Mais comment puis-je déterminer le nombre de canaux de abs_dst_gray dans le programme? Y a-t-il une fonction pour le faire? Ou est-ce possible par une autre méthode, qui devrait être écrite par le programmeur? Veuillez m'aider ici.

Merci d'avance.

17
Lakshmi Narayanan

Appelez Mat.channels():

cv::Mat img(1,1,CV_8U,cvScalar(0));
std::cout<<img.channels();

Production:

1

qui est le nombre de canaux.

Essayez aussi:

std::cout<<img.type();

Production:

0

qui appartient à CV_8U (regardez ici à la ligne 542). Fichier d'étude types_c.h pour chaque define.

36
LovaBill
8
hetepeperfan