* @param scalefactor multiplier for @p image values.
* @param swapRB flag which indicates that swap first and last channels
* in 3-channel image is necessary.
- * @details input image is resized so one side after resize is equal to corresponing
+ * @param crop flag which indicates whether image will be cropped after resize or not
+ * @details if @p crop is true, input image is resized so one side after resize is equal to corresponing
* dimension in @p size and another one is equal or larger. Then, crop from the center is performed.
+ * If @p crop is false, direct resize without cropping and preserving aspect ratio is performed.
* @returns 4-dimansional Mat with NCHW dimensions order.
*/
CV_EXPORTS_W Mat blobFromImage(const Mat& image, double scalefactor=1.0, const Size& size = Size(),
- const Scalar& mean = Scalar(), bool swapRB=true);
+ const Scalar& mean = Scalar(), bool swapRB=true, bool crop=true);
/** @brief Creates 4-dimensional blob from series of images. Optionally resizes and
* crops @p images from center, subtract @p mean values, scales values by @p scalefactor,
* swap Blue and Red channels.
* @param scalefactor multiplier for @p images values.
* @param swapRB flag which indicates that swap first and last channels
* in 3-channel image is necessary.
- * @details input image is resized so one side after resize is equal to corresponing
+ * @param crop flag which indicates whether image will be cropped after resize or not
+ * @details if @p crop is true, input image is resized so one side after resize is equal to corresponing
* dimension in @p size and another one is equal or larger. Then, crop from the center is performed.
+ * If @p crop is false, direct resize without cropping and preserving aspect ratio is performed.
* @returns 4-dimansional Mat with NCHW dimensions order.
*/
CV_EXPORTS_W Mat blobFromImages(const std::vector<Mat>& images, double scalefactor=1.0,
- Size size = Size(), const Scalar& mean = Scalar(), bool swapRB=true);
+ Size size = Size(), const Scalar& mean = Scalar(), bool swapRB=true, bool crop=true);
/** @brief Convert all weights of Caffe network to half precision floating point.
* @param src Path to origin model from Caffe framework contains single
}
Mat blobFromImage(const Mat& image, double scalefactor, const Size& size,
- const Scalar& mean, bool swapRB)
+ const Scalar& mean, bool swapRB, bool crop)
{
CV_TRACE_FUNCTION();
std::vector<Mat> images(1, image);
- return blobFromImages(images, scalefactor, size, mean, swapRB);
+ return blobFromImages(images, scalefactor, size, mean, swapRB, crop);
}
Mat blobFromImages(const std::vector<Mat>& images_, double scalefactor, Size size,
- const Scalar& mean_, bool swapRB)
+ const Scalar& mean_, bool swapRB, bool crop)
{
CV_TRACE_FUNCTION();
std::vector<Mat> images = images_;
size = imgSize;
if (size != imgSize)
{
- float resizeFactor = std::max(size.width / (float)imgSize.width,
- size.height / (float)imgSize.height);
- resize(images[i], images[i], Size(), resizeFactor, resizeFactor);
- Rect crop(Point(0.5 * (images[i].cols - size.width),
- 0.5 * (images[i].rows - size.height)),
- size);
- images[i] = images[i](crop);
+ if(crop)
+ {
+ float resizeFactor = std::max(size.width / (float)imgSize.width,
+ size.height / (float)imgSize.height);
+ resize(images[i], images[i], Size(), resizeFactor, resizeFactor);
+ Rect crop(Point(0.5 * (images[i].cols - size.width),
+ 0.5 * (images[i].rows - size.height)),
+ size);
+ images[i] = images[i](crop);
+ }
+ else
+ resize(images[i], images[i], size);
}
if(images[i].depth() == CV_8U)
images[i].convertTo(images[i], CV_32F);