mirror of
https://github.com/opencv/opencv.git
synced 2025-06-08 01:53:19 +08:00
dnn: add crop flag to blobFromImage
This commit is contained in:
parent
1ea1ff197d
commit
47e1133e71
@ -695,12 +695,14 @@ CV__DNN_EXPERIMENTAL_NS_BEGIN
|
|||||||
* @param scalefactor multiplier for @p image values.
|
* @param scalefactor multiplier for @p image values.
|
||||||
* @param swapRB flag which indicates that swap first and last channels
|
* @param swapRB flag which indicates that swap first and last channels
|
||||||
* in 3-channel image is necessary.
|
* 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.
|
* 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.
|
* @returns 4-dimansional Mat with NCHW dimensions order.
|
||||||
*/
|
*/
|
||||||
CV_EXPORTS_W Mat blobFromImage(const Mat& image, double scalefactor=1.0, const Size& size = Size(),
|
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
|
/** @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,
|
* crops @p images from center, subtract @p mean values, scales values by @p scalefactor,
|
||||||
* swap Blue and Red channels.
|
* swap Blue and Red channels.
|
||||||
@ -711,12 +713,14 @@ CV__DNN_EXPERIMENTAL_NS_BEGIN
|
|||||||
* @param scalefactor multiplier for @p images values.
|
* @param scalefactor multiplier for @p images values.
|
||||||
* @param swapRB flag which indicates that swap first and last channels
|
* @param swapRB flag which indicates that swap first and last channels
|
||||||
* in 3-channel image is necessary.
|
* 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.
|
* 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.
|
* @returns 4-dimansional Mat with NCHW dimensions order.
|
||||||
*/
|
*/
|
||||||
CV_EXPORTS_W Mat blobFromImages(const std::vector<Mat>& images, double scalefactor=1.0,
|
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.
|
/** @brief Convert all weights of Caffe network to half precision floating point.
|
||||||
* @param src Path to origin model from Caffe framework contains single
|
* @param src Path to origin model from Caffe framework contains single
|
||||||
|
@ -85,15 +85,15 @@ static String toString(const T &v)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Mat blobFromImage(const Mat& image, double scalefactor, const Size& size,
|
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();
|
CV_TRACE_FUNCTION();
|
||||||
std::vector<Mat> images(1, image);
|
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,
|
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();
|
CV_TRACE_FUNCTION();
|
||||||
std::vector<Mat> images = images_;
|
std::vector<Mat> images = images_;
|
||||||
@ -103,6 +103,8 @@ Mat blobFromImages(const std::vector<Mat>& images_, double scalefactor, Size siz
|
|||||||
if (size == Size())
|
if (size == Size())
|
||||||
size = imgSize;
|
size = imgSize;
|
||||||
if (size != imgSize)
|
if (size != imgSize)
|
||||||
|
{
|
||||||
|
if(crop)
|
||||||
{
|
{
|
||||||
float resizeFactor = std::max(size.width / (float)imgSize.width,
|
float resizeFactor = std::max(size.width / (float)imgSize.width,
|
||||||
size.height / (float)imgSize.height);
|
size.height / (float)imgSize.height);
|
||||||
@ -112,6 +114,9 @@ Mat blobFromImages(const std::vector<Mat>& images_, double scalefactor, Size siz
|
|||||||
size);
|
size);
|
||||||
images[i] = images[i](crop);
|
images[i] = images[i](crop);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
resize(images[i], images[i], size);
|
||||||
|
}
|
||||||
if(images[i].depth() == CV_8U)
|
if(images[i].depth() == CV_8U)
|
||||||
images[i].convertTo(images[i], CV_32F);
|
images[i].convertTo(images[i], CV_32F);
|
||||||
Scalar mean = mean_;
|
Scalar mean = mean_;
|
||||||
|
Loading…
Reference in New Issue
Block a user