当我要求彩色图像时,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 是不是正常?的主要内容,如果未能解决你的问题,请参考以下文章