cpp blobFromImage()函数 源码
时间: 2023-10-12 20:14:30 浏览: 51
blobFromImage()函数的源码如下:
```
cv::Mat blobFromImage(cv::InputArray image, double scalefactor = 1.0, const cv::Size& size = cv::Size(), const cv::Scalar& mean = cv::Scalar(), bool swapRB = true, bool crop = false, int ddepth = CV_32F)
{
CV_Assert(!size.width || !size.height || (size.width > 0 && size.height > 0));
cv::Mat src = image.getMat();
if (src.empty())
CV_Error(cv::Error::StsBadArg, "image is empty");
if (ddepth != CV_32F && ddepth != CV_8U)
CV_Error(cv::Error::StsBadArg, "unsupported output depth");
const int type = ddepth == CV_8U ? CV_8UC(src.channels()) : CV_32FC(src.channels());
cv::Mat dst;
if (size.width > 0 && size.height > 0)
{
cv::resize(src, dst, size);
}
else
{
dst = src;
}
if (swapRB)
{
cv::cvtColor(dst, dst, cv::COLOR_BGR2RGB);
}
cv::Mat mean_;
if (mean.empty())
{
mean_ = cv::Mat::zeros(cv::Size(dst.cols, dst.rows), type);
}
else
{
if (mean.total() == src.channels())
{
cv::Scalar channel_mean = cv::mean(mean);
mean_ = cv::Mat::ones(cv::Size(dst.cols, dst.rows), type) * channel_mean;
}
else
{
cv::cvtColor(mean, mean_, dst.channels() == 1 ? cv::COLOR_GRAY2BGR : cv::COLOR_BGR2RGB);
cv::resize(mean_, mean_, dst.size());
}
}
cv::Mat norm_dst;
cv::subtract(dst, mean_, norm_dst);
if (scalefactor != 1.0)
{
norm_dst.convertTo(norm_dst, type, scalefactor);
}
if (crop)
{
int top = (dst.rows - size.height) / 2;
int left = (dst.cols - size.width) / 2;
cv::Rect roi(left, top, size.width, size.height);
return norm_dst(roi);
}
return norm_dst;
}
```
该函数用于将图像转换为网络输入所需的blob格式。blob是一种多维数组,将图像的像素值组织成一定的维度,以适应网络的输入。该函数的参数包括:
- image:输入图像。
- scalefactor:缩放因子,默认为1.0。
- size:blob的大小,默认为空。
- mean:均值,用于归一化,默认为空。
- swapRB:是否交换R和B通道,默认为true。
- crop:是否进行裁剪,默认为false。
- ddepth:输出图像的深度,默认为CV_32F。
该函数的实现主要包括以下步骤:
- 检查输入参数的有效性,包括size、ddepth等。
- 对输入图像进行大小调整,以满足size的要求。
- 交换R和B通道。
- 计算均值,用于归一化。
- 归一化图像。
- 进行裁剪(如果需要)。
- 返回blob格式的图像。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![chm](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)