OpenCV数据类型及转换

这篇博客介绍了OpenCV中常见的数据类型,包括无符号和有符号的8位、16位、32位整型以及32位浮点数,并展示了如何在这些类型间进行转换。此外,还详细阐述了如何在Mat和vector之间进行转换,提供了一组模板函数示例来实现这一过程。在转换时需注意精度的保留,特别是从高精度到低精度的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、OpenCV数据类型

 无符号8bit整型(最常用):Unsigned 8bits uchar 0~255
        IplImage: IPL_DEPTH_8U
        Mat: CV_8UC1, CV_8UC2, CV_8UC3, CV_8UC4

有符号8bit整型:Signed 8bits char -128~127
        IplImage: IPL_DEPTH_8S
        Mat: CV_8SC1,CV_8SC2,CV_8SC3,CV_8SC4

无符号16bit整型:Unsigned 16bits ushort 0~65535
        IplImage: IPL_DEPTH_16U
        Mat: CV_16UC1,CV_16UC2,CV_16UC3,CV_16UC4

有符号16bit整型:Signed 16bits short -32768~32767
        IplImage: IPL_DEPTH_16S
        Mat: CV_16SC1,CV_16SC2,CV_16SC3,CV_16SC4

有符号32bit整型:Signed 32bits int -2147483648~2147483647
        IplImage: IPL_DEPTH_32S
        Mat: CV_32SC1,CV_32SC2,CV_32SC3,CV_32SC4

32bit浮点数:Float 32bits float -1.18*10-38~3.40*10-38
        IplImage: IPL_DEPTH_32F
        Mat: CV_32FC1,CV_32FC2,CV_32FC3,CV_32FC4

32bit浮点数:Float 32bits float -1.18*10-38~3.40*10-38
        IplImage: IPL_DEPTH_32F
        Mat: CV_32FC1,CV_32FC2,CV_32FC3,CV_32FC4

二、类型之间转换

        以 CV_8U转为CV_16U为例,

mat.convertTo(mat,2); //代表的是16U,注意,转类型的时候不需要考虑通道
mat = mat * 257; //8bit的数据乘以257就转为了16bit

         需要注意,转换的时候不要忘记丢失精度,尤其是高精度向低精度类型转化时。

三、Mat和vector类型互转

#include <opencv2/opencv.hpp>
#include <opencv2/imgproc.hpp>

/***************** Mat转vector **********************/
template<typename _Tp>
std::vector<_Tp> convertMat2Vector(const cv::Mat &mat)
{
	return (std::vector<_Tp>)(mat.reshape(1, 1));//通道数不变,按行转为一行
}

/****************** vector转Mat *********************/
template<typename _Tp>
cv::Mat convertVector2Mat(std::vector<_Tp> v, int channels, int rows)
{
	cv::Mat mat = cv::Mat(v);//将vector变成单列的mat
	cv::Mat dest = mat.reshape(channels, rows).clone();//PS:必须clone()一份,否则返回出错
	return dest;
}

// eg:
std::vector<uchar> img2v = convertMat2Vector<uchar>(img);
cv::Mat v2img = convertVector2Mat<uchar>(img2v, 3, 358);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值