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是可选参数,用于指定缩放因子和输出矩阵的数据类型。