c语言编写用opencv将路径/root/photo中的.jpg图片压缩到路径/root/compressphoto中,给出相应程序和对应的Makefile文件,注意opencv文件处于/root/opencv-4.5.1文件夹中。并对每一行代码简单作用进行解释
时间: 2023-05-28 16:03:46 浏览: 77
程序:
```c
#include <opencv2/opencv.hpp> // 引入OpenCV库
#include <iostream>
#include <string>
using namespace cv; // 使用OpenCV命名空间
using namespace std;
int main()
{
string path = "/root/photo/*.jpg"; // 指定图片路径
vector<String> fn; // 定义字符串向量,存放文件名
glob(path, fn, true); // 获取指定路径下的所有.jpg文件名
for (size_t i = 0; i < fn.size(); ++i)
{
Mat img = imread(fn[i], IMREAD_UNCHANGED); // 读取图片
string compress_path = "/root/compressphoto/" + fn[i].substr(fn[i].find_last_of("/\\") + 1); // 指定压缩路径和文件名
imwrite(compress_path, img, { IMWRITE_JPEG_QUALITY, 50 }); // 压缩并保存图片
}
return 0;
}
```
Makefile文件:
```makefile
OPENCV_INC = -I/root/opencv-4.5.1/include/opencv4
OPENCV_LIB = -L/root/opencv-4.5.1/lib -lopencv_core -lopencv_imgcodecs
all: compress
compress: compress.cpp
g++ $(OPENCV_INC) -o compress compress.cpp $(OPENCV_LIB)
clean:
rm -f compress
```
代码解释:
- `#include <opencv2/opencv.hpp>`:引入OpenCV库。
- `using namespace cv;`:使用OpenCV命名空间,避免使用cv::前缀。
- `string path = "/root/photo/*.jpg";`:指定图片路径。
- `vector<String> fn;`:定义字符串向量,存放文件名。
- `glob(path, fn, true);`:获取指定路径下的所有.jpg文件名。
- `Mat img = imread(fn[i], IMREAD_UNCHANGED);`:读取图片。
- `string compress_path = "/root/compressphoto/" + fn[i].substr(fn[i].find_last_of("/\\") + 1);`:指定压缩路径和文件名。
- `imwrite(compress_path, img, { IMWRITE_JPEG_QUALITY, 50 });`:压缩并保存图片。
- `g++ $(OPENCV_INC) -o compress compress.cpp $(OPENCV_LIB)`:编译程序,并链接OpenCV库。