Mat类型转换之int(阈值0-255)转double(阈值0-1)类型OpenCV实现

方式一、利用 IplImage数据类型转换

1、声明一个 IplImage指针*dst,并进行数据深度转换dst的数据部分在数值上与src的值一致,而其深度转换成了64F。 其中深度指的是每一个像素的位数(bits),在opencv的Mat.depth()中得到的是一个 0 – 6 的数字,分别代表不同的位数:enum { CV_8U=0, CV_8S=1, CV_16U=2, CV_16S=3, CV_32S=4, CV_32F=5, CV_64F=6 }; 可见 0和1都代表8位, 2和3都代表16位,4和5代表32位,6代表64位。

//dst的数据部分在数值上与src的值一致,而其深度转换成了64F,实现由int类型转换到double。

 IplImage* dst = cvCreateImage(cvSize(src->width, src->height), IPL_DEPTH_64F, 3);//IplImage类型的*src中存储的是转换前的数据

2、利用 cvConvertScale进行阈值转换,将阈值从0-255转换到0-1
//将输入图像的像素点double类型值域由0-255转换成0-1

cvConvertScale(src, dst, 1.0 / 255, 0); 

3、将 IplImage转换成Mat类型

  dst_image = cv::cvarrToMat(dst);//dst_image存储转换后的Mat数据

方式二、利用Mat矩阵数据类型转换cv::convertTo函数实现

src.convertTo(src, CV_64FC3, 1.0 / 225);src的数据类型是CV_8UC3

一般图像文件格式使用的是unsigned 8bits,对应的整型数据类型有:CV_8UC1、CV_8UC2,CV_8UC3

其中,CV_8UC3表示3通道8位的unsigned char型。

浮点数据类型说明:

float是32位,对应的CvMat数据结构类型是:CV_32FC1,CV_32FC2,CV_32FC3;其中,CV_32FC3表示32位的3通道float型

double是64位,对应的CvMat数据结构类型是:CV_64FC1,CV_64FC2,CV_64FC3;其中,CV_64FC3表示64位的3通道double型。

关注公众号“striveallen”,回复“1024”即可免费领取110本经典编程电子书。

你可能感兴趣的:(Mat类型转换之int(阈值0-255)转double(阈值0-1)类型OpenCV实现)