【OpenCV】获取图像宽度、高度、通道数、深度、类型

本文通过实例展示了如何使用OpenCV库中的Mat对象获取图像的宽度、高度、通道数、深度和类型,并解释了图像深度和类型的枚举值及其含义。
摘要由CSDN通过智能技术生成

1 前言

        本文将介绍如何通过一个Mat对象,获取图像个各种信息(cols,rows,channels,depth,type),以及图像深度、类型问题。

2 代码及相关知识

#include "iostream"
#include "opencv2/opencv.hpp"

using namespace std;
using namespace cv;

int main(int argc,char *argv)
{
	Mat src = imread("C:/Users/Administrator/Desktop/Zooey.png",IMREAD_COLOR);
	if (src.empty())
	{
		cout << "could not find image file" << endl;
		return -1;
	}
	namedWindow("input", WINDOW_AUTOSIZE);
	imshow("input", src);
	//获取图像宽度、高度、以及通道数。
	int width = src.cols;
	int height = src.rows;
	int dim = src.channels();
	//获取图像深度与类型。
	int d = src.depth();
	int t = src.type();
	//注意:下面d和t的输出都是枚举值对应的数字。深度为:CV_8U(0),类型为:CV_8UC3(16)
	printf("宽度:%d,高度:%d,通道数:%d,深度:%d,类型:%d\n", width, height, dim, d, t);
	

	waitKey(0);
	destroyAllWindows();
	return 0;
}

上述代码会显示一张图片,并将图片的相关信息打印出来。

  • src.cols; 获取图像宽度,即图像列数。
  • src.rows; 获取图像高度,即图像行数。
  • src.channels(); 获取图像通道数。
  • src.depth(); 获取图像深度。
  • src.type(); 获取图像类型。

后两个需要注意一下,它们是枚举值,打印时会打印其对应的数字。下面说下这些枚举值,附图:

图中,上部分是图像深度对应的枚举值,下部分是图像类型对应的枚举值。

图像深度值是多少(注意深度值和深度不一样,这里图像24表示8位三通道,共24位。后面对深度有解释) ,我们可以右击图片属性,在详细信息中查看。如下:

我们可以看到图像类型实际上就是图像深度枚举值+Cx的格式,而C代表通道channel,C1即单通道,C2即双通道,这样来看就很好理解其含义了。比如CV_8UC3,即8位无符号3通道类型。

        关于这些枚举值对应的数字,我只找到了图像深度的,图像类型本人没有找到,但靠cout<<CV_8UC1;这种方式可以将其对应的数值打印出来。图像深度对应的数值只需要用键盘随便敲出任意一个,然后右键点击转到定义即可。如图:

PS:图像深度是指存储每个像素所用的位数,它也是用来度量图像的色彩分辨率的。因此,图像深度值跟通道数也有关系,3通道一般是彩色图像,单通道则是灰度图像,CV_8UC3的彩色图像(一个像素有8x3位),图像深度是24,CV_8UC1的灰色图像(一个像素有8x1位),图像深度便是8。因为这里一个通道有8位,所以只有一个通道的灰度图像是8,而有三个通道的彩色图像便是24。

PS(2021-5-23):

  • Mat<uchar>---------CV_8U
  • Mat<char>-----------CV_8S
  • Mat<short>---------CV_16S
  • Mat<ushort>--------CV_16U
  • Mat<int>-----------CV_32S
  • Mat<float>----------CV_32F
  • Mat<double>--------CV_64F

3 结束语

        主要介绍了图像的几个基本属性,图像深度这些要搞懂。

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值