OpenCV CV_8UC3 to CV_8UC1



我的图像是CV_8UC3类型(它是灰度图像),我需要它作为CV_8UC1。如何进行转换?我已经试过了

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

但它仍然给了我一个 3 通道的图像。

RectLeft 是此图像的校正版本:

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

更正是使用以下部分代码完成的:

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);        

校正后的图像(及其右侧相机的合作伙伴)应用于

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

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

您可能想要对StereoBM进行灰度转换:

Imgproc.cvtConvert(src,dst,Imgproc.COLOR_BGR2GRAY);

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

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

No, 16 是CV_8UC3

~  python
Python 2.7.2 (default, Oct 11 2012, 20:14:37)
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>> cv2.CV_8UC1
0
>>> cv2.CV_8UC3
16
>>>

您必须将其转换为灰度:

cvtColor(imageIn, imageOut, COLOR_BGR2GRAY);

参考资料:

void Mat:

:convertTo(Mat& m, int rtype, double alpha=1, double beta=0) const

rtype – 所需的目标矩阵类型,或者更确切地说,深度 (因为通道数将与源通道数相同)。 如果 rtype 为负数,则目标矩阵将具有相同的类型 作为来源。

split通道并仅获取其中一个通道,或使用threshold转换为二进制图像

编辑:

有关如何在opencv中构建类型(如8UC1等)的完整答案,请参阅此处。

为了转换为灰度..谷歌它,它充满了很好的资源。记住参考文献 基本映像容器

相关内容

  • 没有找到相关文章

最新更新