用opencv将路径/root/photo中的.jpg图片压缩到路径/root/compressphoto中,给出相应程序和对应的Makefile文件,注意opencv文件处于/root/opencv-4.5.1文件夹中。并对每一行代码简单作用进行解释
时间: 2023-05-28 21:03:46 浏览: 96
程序如下:
```c++
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(){
string path = "/root/photo/"; // 源图片路径
string compressPath = "/root/compressphoto/"; // 压缩后图片路径
vector<string> fileList; // 图片文件名列表
glob(path, fileList); // 获取源路径下所有图片文件名
for (int i = 0; i < fileList.size(); i++){
Mat img = imread(fileList[i], IMREAD_UNCHANGED); // 读取图片
imwrite(compressPath + fileList[i].substr(path.length()), img, { IMWRITE_JPEG_QUALITY, 50 }); // 压缩并写入图片
}
return 0;
}
```
Makefile文件如下:
```makefile
CC = g++
CFLAGS = -I/root/opencv-4.5.1/include
LDFLAGS = -L/root/opencv-4.5.1/lib -lopencv_core -lopencv_imgcodecs
all:
$(CC) $(CFLAGS) -o compress compress.cpp $(LDFLAGS)
```
代码解释:
1. `glob`函数可以获取指定路径下所有匹配的文件名,将其保存在vector中。
2. `imread`函数可以读取指定路径下的图片,返回一个Mat对象,用于后续的处理。
3. `imwrite`函数可以将图片写入指定路径,第二个参数为需要写入的Mat对象,第三个参数可以设置压缩参数,本例中设置为JPEG格式,压缩质量为50。
4. Makefile中,`CFLAGS`设置头文件路径,`LDFLAGS`设置库文件路径及需要链接的库文件。
5. `all`规则用于编译程序,其中`-o`参数指定输出文件名,`compress.cpp`为源文件名。
阅读全文