Commit 78fabfe6 authored by Aleksandr Rybnikov's avatar Aleksandr Rybnikov Committed by Vadim Pisarevsky

Changed blobFromImages() function, so it can handle 1-channel images (#1185)

parent 1ca1a125
...@@ -70,25 +70,8 @@ static String toString(const T &v) ...@@ -70,25 +70,8 @@ static String toString(const T &v)
Mat blobFromImage(const Mat& image_, double scalefactor, bool swapRB) Mat blobFromImage(const Mat& image_, double scalefactor, bool swapRB)
{ {
Mat image; std::vector<Mat> images(1, image_);
if(image_.depth() == CV_8U) return blobFromImages(images, scalefactor, swapRB);
{
image_.convertTo(image, CV_32F, scalefactor);
}
else
image = image_;
CV_Assert(image.dims == 2 && image.depth() == CV_32F);
int nch = image.channels();
CV_Assert(nch == 3 || nch == 4);
int sz[] = { 1, 3, image.rows, image.cols };
Mat blob(4, sz, CV_32F);
Mat ch[4];
for( int j = 0; j < 3; j++ )
ch[j] = Mat(image.rows, image.cols, CV_32F, blob.ptr(0, j));
if(swapRB)
std::swap(ch[0], ch[2]);
split(image, ch);
return blob;
} }
Mat blobFromImages(const std::vector<Mat>& images, double scalefactor, bool swapRB) Mat blobFromImages(const std::vector<Mat>& images, double scalefactor, bool swapRB)
...@@ -98,30 +81,57 @@ Mat blobFromImages(const std::vector<Mat>& images, double scalefactor, bool swap ...@@ -98,30 +81,57 @@ Mat blobFromImages(const std::vector<Mat>& images, double scalefactor, bool swap
return Mat(); return Mat();
Mat image0 = images[0]; Mat image0 = images[0];
int nch = image0.channels(); int nch = image0.channels();
CV_Assert(image0.dims == 2 && (nch == 3 || nch == 4)); CV_Assert(image0.dims == 2);
int sz[] = { (int)nimages, 3, image0.rows, image0.cols }; Mat blob, image;
Mat blob(4, sz, CV_32F), image; if (nch == 3 || nch == 4)
Mat ch[4];
for( i = 0; i < nimages; i++ )
{ {
Mat image_ = images[i]; int sz[] = { (int)nimages, 3, image0.rows, image0.cols };
if(image_.depth() == CV_8U) blob = Mat(4, sz, CV_32F);
Mat ch[4];
for( i = 0; i < nimages; i++ )
{ {
image_.convertTo(image, CV_32F, scalefactor); Mat image_ = images[i];
if(image_.depth() == CV_8U)
{
image_.convertTo(image, CV_32F, scalefactor);
}
else
image = image_;
CV_Assert(image.depth() == CV_32F);
nch = image.channels();
CV_Assert(image.dims == 2 && (nch == 3 || nch == 4));
CV_Assert(image.size() == image0.size());
for( int j = 0; j < 3; j++ )
ch[j] = Mat(image.rows, image.cols, CV_32F, blob.ptr((int)i, j));
if(swapRB)
std::swap(ch[0], ch[2]);
split(image, ch);
} }
else }
image = image_; else
CV_Assert(image.depth() == CV_32F); {
nch = image.channels(); CV_Assert(nch == 1);
CV_Assert(image.dims == 2 && (nch == 3 || nch == 4)); int sz[] = { (int)nimages, 1, image0.rows, image0.cols };
CV_Assert(image.size() == image0.size()); blob = Mat(4, sz, CV_32F);
for( int j = 0; j < 3; j++ ) for( i = 0; i < nimages; i++ )
ch[j] = Mat(image.rows, image.cols, CV_32F, blob.ptr((int)i, j)); {
if(swapRB) Mat image_ = images[i];
std::swap(ch[0], ch[2]); if(image_.depth() == CV_8U)
split(image, ch); {
image_.convertTo(image, CV_32F, scalefactor);
}
else
image = image_;
CV_Assert(image.depth() == CV_32F);
nch = image.channels();
CV_Assert(image.dims == 2 && (nch == 1));
CV_Assert(image.size() == image0.size());
image.copyTo(Mat(image.rows, image.cols, CV_32F, blob.ptr((int)i, 0)));
}
} }
return blob; return blob;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment