C++ opencv修改图片尺寸
时间: 2023-09-18 07:10:44 浏览: 117
使用OpenCV库可以方便地修改图片尺寸。下面是一个C++实例代码:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img = imread("test.jpg"); // 读取图片
int width = 640; // 新的宽度
int height = 480; // 新的高度
Mat img_resized;
resize(img, img_resized, Size(width, height)); // 修改图片尺寸
imwrite("test_resized.jpg", img_resized); // 保存图片
return 0;
}
```
上述代码中,我们通过`resize()`函数来修改图片的尺寸。其中,第一个参数是原始图片,第二个参数是修改后的图片,第三个参数是修改后的图片尺寸。最后,我们通过`imwrite()`函数将修改后的图片保存到本地。
相关问题
OpenCV修改图像尺寸
### 使用 OpenCV 修改图像尺寸
在 C++ 中,通过调用 `cv::resize` 函数来调整图像大小。此函数允许指定目标尺寸或缩放因子,并可以选择不同的插值方法以优化输出质量。
#### 参数说明
- **src**: 输入图像。
- **dst**: 输出图像。
- **dsize**: 输出图像的尺寸 (`Size(width, height)`)[^1]。
- **fx**, **fy**: 沿着 X 和 Y 方向的缩放比例,默认为 0 表示不使用固定尺度而采用 dsize 定义的比例。
- **interpolation**: 插值方式,常用的有线性插值(默认)、三次样条插值以及 Lanczos 插值等[^2]。
下面是一个简单的例子展示如何利用这些参数创建一个新尺寸的图片:
```cpp
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
// 加载源图像
Mat img = imread("path_to_image.jpg");
if (img.empty()) {
std::cout << "无法加载图像!" << std::endl;
return -1;
}
// 创建一个新的矩阵用于存储调整后的图像数据
Mat resizedImg;
// 将输入图像调整到新的分辨率并应用立方插值法提高画质
resize(img, resizedImg, Size(), 0.5, 0.5, INTER_CUBIC);
// 展示原始与处理过的图像对比效果
imshow("Original Image", img);
imshow("Resized Image", resizedImg);
waitKey(0); // 等待按键事件关闭窗口
return 0;
}
```
这段代码会把给定路径下的彩色照片缩小一半显示出来。注意这里我们并没有显式设置最终的目标尺寸而是选择了相对缩放系数 `0.5` 来减少宽高各一倍;同时也指定了更高质量但计算成本较高的 `INTER_CUBIC` 方法作为重采样的算法。
c++ OpenCV
### C++ OpenCV 使用教程及实例
#### 创建工程与基本配置
为了使用 OpenCV 库,在创建新的 C++ 工程之前,需先下载并安装 OpenCV。完成之后,要确保编译器能够找到头文件以及链接所需的库文件。对于大多数集成开发环境 (IDE),这涉及到设置包含路径和库路径。
在 `img_show.h` 文件中展示了如何引入必要的 OpenCV 头文件[^2]:
```cpp
#pragma once
#ifndef __IMG_SHOW__
#define __IMG_SHOW__
#include <iostream>
#include <opencv2/opencv.hpp>
namespace img_test {
class test {
public:
int sum(int a, int b) { return a + b; }
int aa = 10, bb = 15;
private:
int a, b;
};
}
#endif // !
```
此代码片段定义了一个简单的类 `test` 并包含了 OpenCV 的核心模块和其他常用组件的头文件。
#### 基本操作:显示图片
通过上述准备后,可以编写程序来加载一张图片,并利用窗口功能展示出来。以下是具体实现方式:
```cpp
#include "img_show.h"
int main() {
using namespace cv;
Mat image;
image = imread("example.png", IMREAD_COLOR); // Read the file
if (image.empty()) { // Check for invalid input
std::cout << "Could not open or find the image" << std::endl;
return -1;
}
namedWindow("Display window", WINDOW_AUTOSIZE);
imshow("Display window", image);
waitKey(0); // Wait indefinitely until key press event occurs.
}
```
这段代码实现了从磁盘读取图像文件的功能,并在一个名为 “Display window”的窗口内呈现该图像。如果找不到指定路径下的图像,则会打印错误消息并退出应用程序。
#### 几何变换:调整大小
除了基础的操作外,还可以应用各种几何转换到输入的数据上。例如,可以通过调用 `cv::resize()` 方法轻松地更改图像尺寸。下面给出了一段完整的例子用于说明这一点[^3]:
```cpp
#include <opencv2/opencv.hpp>
using namespace cv;
int main() {
Mat srcImg = imread("input.jpg");
double scaleFactor = 0.75;
Size newSize(srcImg.cols * scaleFactor, srcImg.rows * scaleFactor);
Mat dstImg;
resize(srcImg, dstImg, newSize);
imshow("Source Image", srcImg);
imshow("Resized Image", dstImg);
waitKey();
}
```
这里演示了怎样按比例缩小给定的一张照片;用户可以根据实际需求修改参数以适应不同的应用场景。
#### 密集光流计算
最后介绍的是关于视频处理方面的一个重要概念—密集光流场估计。它可以帮助我们理解连续帧之间物体运动情况的变化趋势。下面是执行这一过程所需的关键步骤概述[^4]:
```cpp
VideoCapture cap("video.mp4");
if (!cap.isOpened())
{
printf("Cannot open video\n");
return -1;
}
Mat prevFrame, currFrame, flowField, hsvFlowMap, rgbFlowMap;
for (;;)
{
cap >> prevFrame;
if (prevFrame.empty())
break;
cap >> currFrame;
if (currFrame.empty())
continue;
calcOpticalFlowFarneback(prevFrame, currFrame, flowField, 0.5, 3, 15, 3, 5, 1.2, 0);
// Convert optical flow into HSV color space and then to RGB...
}
```
以上就是有关于C++环境下运用OpenCV的一些基础知识和技术要点。希望这些信息能帮助读者更好地理解和掌握这个强大的计算机视觉工具包!
阅读全文
相关推荐















