OpenCV CV_8UC3到CV_8UC1

gle*_*ien 2 java opencv

我的图像是类型CV_8UC3(它是灰度图像),我需要它CV_8UC1.我怎样才能进行转型?我已经试过了

Mat right = new Mat(rectRight.width(), rectRight.height(), CvType.CV_8UC1);
rectRight.convertTo(right, CvType.CV_8UC1,255,0);
Run Code Online (Sandbox Code Playgroud)

但它仍然给我一个3通道图像.

RectLeft是此图像的修正版本:

Imgproc.undistort(Highgui.imread(images[0], Imgproc.COLOR_BGR2GRAY), undist_left, cameraMatrix, distCoeff);
Run Code Online (Sandbox Code Playgroud)

使用这部分代码完成整改:

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);        
Run Code Online (Sandbox Code Playgroud)

应使用经过校正的图像(及其右侧相机的伙伴)

StereoBM stereoAlgo = new StereoBM();
stereoAlgo.compute(left, right, disparity);
Run Code Online (Sandbox Code Playgroud)

但是有一个例外,它说两个输入图像都应该是类型,CV_8UC1但我已经检查并rectLeft.type()给了我一个16.(我猜这是CV_8UC1).

ber*_*rak 6

你可能想要StereoBM的灰度转换:

Imgproc.cvtConvert(src,dst,Imgproc.COLOR_BGR2GRAY);
Run Code Online (Sandbox Code Playgroud)

http://docs.opencv.org/java/org/opencv/imgproc/Imgproc.html#cvtColor(org.opencv.core.Mat,%20org.opencv.core.Mat,%20int,%20int)

(你不能用Mat.convertTo()改变/减少通道数,只有深度)