【发布时间】:2020-10-18 13:34:15
【问题描述】:
我正在使用 OpenCV(v 2.4.9.1,Ubuntu 16.04)对图像进行调整大小和裁剪,原始图像是尺寸为 640x480 的 JPEG 文件。
cv::Mat _aspect_preserving_resize(const cv::Mat& image, int target_width)
{
cv::Mat output;
int min_dim = ( image.cols >= image.rows ) ? image.rows : image.cols;
float scale = ( ( float ) target_width ) / min_dim;
cv::resize( image, output, cv::Size(int(image.cols*scale), int(image.rows*scale)));
return output;
}
cv::Mat _center_crop(cv::Mat& image, cv::Size& input_size)
{
cv::Rect myROI(int(image.cols/2-input_size.width/2), int(image.rows/2-input_size.height/2), input_size.width, input_size.height);
cv::Mat croppedImage = image(myROI);
return croppedImage;
}
int min_input_size = int(input_size.height * 1.14);
cv::Mat image = cv::imread("power-dril/47105738371_72f83eeb37_z.jpg");
cv::Mat output = _aspect_preserving_resize(image, min_input_size);
cv::Mat result = _center_crop(output, input_size);
在此之后我显示图像,它看起来很完美 - 正如我所期望的那样:
问题出现在我流式传输此图像时,我注意到裁剪图像的大小(以元素为单位)仅为我预期的三分之一。看起来好像在所得作物上只有一个通道。它应该有224*224*3=150528,但我在做的时候只得到50176
std::cout << cropped_image.total() << " " << cropped_image.type() << endl;
>>> 50176 16
知道这里有什么问题吗?生成的cv::Mat的类型看起来还行,视觉上也还行,怎么只有一个通道呢?
提前致谢。
【问题讨论】: