cv::Mat::convertTo();cv::subtract();cv::Scalar();cv::divide()

这段代码展示了如何使用OpenCV对图像进行预处理,包括从BGR转RGB,调整尺寸,将像素值转换为32位浮点数并归一化,然后执行均值减法和标准差除法,这些步骤常用于深度学习模型如TensorRT的输入准备。

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

	cv::Mat image = cv::imread("D:/images/space_shuttle.jpg");// Mat是一个opencv库中的数据类型,表示一张图篇
	cv::Mat rgb, blob;
	cv::cvtColor(image, rgb, cv::COLOR_BGR2RGB);//将图片从BGR格式转换为RGB格式
	cv::resize(rgb, blob, cv::Size(224, 224));//将图片大小调整为224x224
	blob.convertTo(blob, CV_32F);//将像素值转换为32位浮点数类型
	blob = blob / 255.0;//将像素值归一化到0~1之间
	cv::subtract(blob, cv::Scalar(0.485, 0.456, 0.406), blob);
	cv::divide(blob, cv::Scalar(0.229, 0.224, 0.225), blob);

convertTo()函数是OpenCV库中的一个函数,用于将一个矩阵中的元素类型转换为另一种类型。

void cv::Mat::convertTo(OutputArray dst, int rtype, double alpha=1, double beta=0) const

其中,dst表示输出矩阵,rtype表示输出矩阵的元素类型,alpha和beta是可选参数,用于进行缩放和平移操作。 

cv::subtract()是OpenCV库中的一个函数,用于对两个矩阵进行逐元素相减操作。在这段代码中,cv::subtract()函数被用于对经过归一化处理后的图片进行均值减法操作。具体来说,代码中使用cv::Scalar(0.485, 0.456, 0.406)表示三个通道的均值,然后将其作为参数传递给cv::subtract()函数,对blob矩阵中的每个元素进行减法操作。这一步操作可以将图片中的每个像素值减去均值,以便于后续使用TensorRT进行推理。cv::subtract()函数的语法如下:

void cv::subtract(InputArray src1, InputArray src2, OutputArray dst, InputArray mask=noArray(), int dtype=-1)

其中,src1和src2表示输入矩阵,dst表示输出矩阵,mask和dtype是可选参数,用于指定掩码和输出矩阵的数据类型。

cv::Scalar()是OpenCV库中的一个函数,用于创建一个包含多个通道的标量值。在这段代码中,cv::Scalar()函数被用于创建一个三通道的标量值,用于进行均值减法操作。cv::Scalar()函数的语法如下:

cv::Scalar::Scalar(double v0=0, double v1=0, double v2=0, double v3=0)


其中,v0、v1、v2和v3表示标量值的各个通道的值。

cv::divide()是OpenCV库中的一个函数,用于对两个矩阵进行逐元素相除操作。在这段代码中,cv::divide()函数被用于对经过均值减法处理后的图片进行标准差除法操作。具体来说,代码中使用cv::Scalar(0.229, 0.224, 0.225)表示三个通道的标准差,然后将其作为参数传递给cv::divide()函数,对blob矩阵中的每个元素进行除法操作。这一步操作可以将图片中的每个像素值除以标准差,以便于后续使用TensorRT进行推理。cv::divide()函数的语法如下:

void cv::divide(InputArray src1, InputArray src2, OutputArray dst, double scale=1, int dtype=-1)


其中,src1和src2表示输入矩阵,dst表示输出矩阵,scale和dtype是可选参数,用于指定缩放因子和输出矩阵的数据类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值