当我要求彩色图像时,Opencv 的 imread 给我一个 2-D Mat 是不是正常?

Posted

技术标签:

【中文标题】当我要求彩色图像时,Opencv 的 imread 给我一个 2-D Mat 是不是正常?【英文标题】:Is it normal that Opencv's imread is giving me a 2-D Mat when I ask for a color image?当我要求彩色图像时,Opencv 的 imread 给我一个 2-D Mat 是否正常? 【发布时间】:2016-08-17 09:12:06 【问题描述】:

所以我的文件夹中有一个 .bmp 图像文件。

我使用 imread 加载它:

  cv::Mat image = cv::imread( imageName, CV_LOAD_IMAGE_COLOR );

之后,我查看它的尺寸:

std::cout<<"Rows: "<<image.rows <<"  Cols:"<<image.cols<<" Dims:"<<image.dims<<std::endl;

这给了我:

行数:480 列数:640 点数:2

但鉴于我有 RGB 图像,它不应该也是 3D Mat 吗?

【问题讨论】:

【参考方案1】:

是的,这很正常。

dims 定义为(来自doc):

int dims; //!数组维数,>= 2

您应该查看number of channels:

std:cout << "Channels: " << image.channels() << std::endl;

【讨论】:

谢谢。我还有一个小问题。在虚构的小零中,有一个参数 ndim。我认为这与 dim 不同。 是的。 (请注意,我为 dims 粘贴了错误的定义。现在已更正) 等等,如果我想制作黑色 rgb 图像(dim=2 和 channels=3,我该怎么做? Mat3b img(rows, cols, Vec3b(0,0,0)),或Mat img = Mat::zeros(rows, cols, CV_8UC3);。您可以在矩阵类型中定义通道数(C3 代表 3 个通道)。 ndims 参数仅对多维矩阵有用,但对于二维矩阵(例如图像)不需要此参数 @mhaghighat 从 OpenCV 的角度来看:是的。一个二维矩阵,其中每个元素都是一个三元组 BGR

以上是关于当我要求彩色图像时,Opencv 的 imread 给我一个 2-D Mat 是不是正常?的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV中原始图像加载与保存压缩技巧

opencv

OpenCV之图像伪彩色增强

OpenCV Python equalizeHist 彩色图像

opencv系列02OpenCV4.X图像读取与显示

OpenCV的图像读取显示及保存