opencv c++ 图片等比例拉伸
时间: 2023-06-29 12:13:26 浏览: 241
在 OpenCV 中,可以使用 resize() 函数来对图像进行缩放操作,从而实现图片等比例拉伸。具体来说,可以按照以下步骤进行操作:
1. 读取原始图像,获取其宽度和高度。
2. 计算目标图像的宽度和高度,假设要将原始图像等比例缩放为宽度为 targetWidth,高度为 targetHeight 的目标图像,可以按照以下公式计算:
- 如果原始图像宽度小于等于目标宽度,并且高度小于等于目标高度,则不需要进行缩放,直接使用原始图像即可。
- 如果原始图像宽度小于等于目标宽度,但高度大于目标高度,则按照原始图像高度和目标高度的比例缩放宽度,然后将高度设置为目标高度。
- 如果原始图像宽度大于目标宽度,但高度小于等于目标高度,则按照原始图像宽度和目标宽度的比例缩放高度,然后将宽度设置为目标宽度。
- 如果原始图像宽度大于目标宽度,并且高度大于目标高度,则分别按照原始图像宽度和目标宽度的比例缩放高度,以及按照原始图像高度和目标高度的比例缩放宽度,然后选择缩放比例较小的那个,保证图像等比例缩放。
3. 使用 resize() 函数将原始图像缩放为目标图像大小。具体来说,可以按照以下代码进行操作:
```c++
cv::Mat srcImage = cv::imread("input.jpg");
cv::Mat dstImage;
int targetWidth = 800;
int targetHeight = 600;
int srcWidth = srcImage.cols;
int srcHeight = srcImage.rows;
if (srcWidth <= targetWidth && srcHeight <= targetHeight) {
// 不需要缩放
dstImage = srcImage.clone();
} else if (srcWidth <= targetWidth && srcHeight > targetHeight) {
// 按照高度缩放
int scale = targetHeight / srcHeight;
int dstWidth = srcWidth * scale;
cv::resize(srcImage, dstImage, cv::Size(dstWidth, targetHeight));
} else if (srcWidth > targetWidth && srcHeight <= targetHeight) {
// 按照宽度缩放
int scale = targetWidth / srcWidth;
int dstHeight = srcHeight * scale;
cv::resize(srcImage, dstImage, cv::Size(targetWidth, dstHeight));
} else {
// 按照较小比例缩放
float scaleWidth = (float)targetWidth / srcWidth;
float scaleHeight = (float)targetHeight / srcHeight;
float scale = std::min(scaleWidth, scaleHeight);
int dstWidth = srcWidth * scale;
int dstHeight = srcHeight * scale;
cv::resize(srcImage, dstImage, cv::Size(dstWidth, dstHeight));
}
```
在这里,使用了 cv::Size() 函数来创建目标图像的大小,然后将原始图像传入 resize() 函数中,即可得到缩放后的目标图像。
阅读全文