OpenCV CV_8UC3 à CV_8UC1

Mon image est de type CV_8UC3 (c'est une image en niveaux de gris) et j'ai besoin d'elle comme CV_8UC1.
Comment puis-je faire la transformation? J'ai déjà essayé

Mat right = new Mat(rectRight.width(), rectRight.height(), CvType.CV_8UC1);
rectRight.convertTo(right, CvType.CV_8UC1,255,0);

Mais il me donne toujours un 3-l'image de canal.

RectLeft est la version rectifiée de cette image:

Imgproc.undistort(Highgui.imread(images[0], Imgproc.COLOR_BGR2GRAY), undist_left, cameraMatrix, distCoeff);

La rectification est effectuée à l'aide de cette partie de code:

Mat rectLeft = new Mat();
Imgproc.initUndistortRectifyMap(cameraMatrix, distCoeff, R1, newCameraMatrix_left, left.size(), CvType. CV_32FC1, map1_left, map2_left);        
Imgproc.remap(left, rectLeft, map1_left, map2_left, Imgproc.INTER_LANCZOS4);        

Le corrigé de l'image (et son partenaire de la caméra de droite) doit être utilisé dans

StereoBM stereoAlgo = new StereoBM();
stereoAlgo.compute(left, right, disparity);

Mais il y a une exception qui dit que les deux images d'entrée doit être de type CV_8UC1 mais j'ai vérifié et rectLeft.type() me donne un 16. (Je suppose que c'est CV_8UC1).

OriginalL'auteur glethien | 2014-04-01