Opencv获取图像像素值数据类型

一、什么是图像像素值数据类型

        不同的图像有不同的像素类型,不过对于不同的像素类型,需要在模板参数传入不同的值。

首先像素的数据类型包括CV_32U,CV_32S,CV_32F,CV_8U,CV_8UC3等,那这些类型都是

什么含义呢;第一个数字表示比特数,第二个数字就表示C++中数据类型,如果还有后面两个字

符,这两个字符表示通道数。例如对于CV_32U,表示具有32比特的unsigned int类型;对于

CV_8UC3,表示具有8比特,并且有三个通道的unsigned char类型。对于这个类型,可以使用

type()来获取。

       根据这些类型,又可以分为两种,一种单通道的,一种多通道的;单通道的一个像素用一个数

值表示即可,而多通道的一个像素需要用多个像素表示,最常用的三通道就需要RGB这三个数值

来表示。那具体的通道顺序是什么呢?在OpenCV中,则是按BGR的顺序来存储的,用数字代替

就是B用channels[0]来获取,G用channels[1]来获取,R用channels[2]来获取。Opencv的设计

者就是这样设计的,记住就好了。

二、代码实现

       在做图像处理时,图像数据并非都是 CV_8U,此时需要对图像数据类型进行查看,以便后续处理,主要代码如下:

#include
#include
 
using namespace std;
using namespace cv;
 
string Type2String(int type)
{
	string strType;
	uchar depth = type & CV_MAT_DEPTH_MASK;
	uchar chans = 1 + (type >> CV_CN_SHIFT);
	switch (depth) 
	{
		case CV_8U:  
			strType = "CV_8U"; break;
		case CV_8S:  
			strType = "CV_8S"; break;
		case CV_16U: 
			strType = "CV_16U"; break;
		case CV_16S: 
			strType = "CV_16S"; break;
		case CV_32S: 
			strType = "CV_32S"; break;
		case CV_32F: 
			strType = "CV_32F"; break;
		case CV_64F: 
			strType = "CV_64F"; break;
		default:  
			strType = "UNKNOWN_TYPE"; break;
	}
	strType += "C";
	strType += (chans + '0');
 
	return strType;
}
void main()
{
	Mat img = imread("1.tif", IMREAD_UNCHANGED);
	cout << img.type() << endl;
	cout << Type2String(img.type()) << endl;
}

说明:该博客属于转载,意在做笔记!!!

你可能感兴趣的:(opencv,c++,opencv,开发语言,计算机视觉)