c语言编写用opencv将路径/root/photo中的.jpg图片压缩到路径/root/compressphoto中,给出相应程序和对应的Makefile文件,注意opencv文件处于/root/opencv-4.5.1文件夹中。并对每一行代码简单作用进行解释
时间: 2023-05-28 08:03:48 浏览: 188
程序代码如下:
```c
#include <opencv2/opencv.hpp> // 引入opencv库
using namespace cv;
int main()
{
Mat img = imread("/root/photo/test.jpg"); // 读取图片
imwrite("/root/compressphoto/test.jpg", img, {IMWRITE_JPEG_QUALITY, 50}); // 压缩图片
return 0;
}
```
Makefile文件如下:
```makefile
CC=g++ # 使用g++编译器
CFLAGS=-I/root/opencv-4.5.1/include/opencv4 # 添加opencv头文件路径
LDFLAGS=-L/root/opencv-4.5.1/lib `pkg-config opencv4 --cflags --libs` # 添加opencv库文件路径和链接库
TARGET=compressphoto # 目标文件名
all: $(TARGET)
$(TARGET): $(TARGET).cpp
$(CC) -o $@ $< $(CFLAGS) $(LDFLAGS)
clean:
rm -f $(TARGET)
```
程序解释:
1. 第一行引入了opencv库,可以使用opencv提供的函数进行图像处理。
2. `imread`函数用于读取图片,第一个参数为图片路径,返回一个`Mat`类型的图像矩阵。
3. `imwrite`函数用于将图片写入文件,第一个参数为写入文件的路径,第二个参数为要写入的图像矩阵,第三个参数为压缩参数,这里使用了`IMWRITE_JPEG_QUALITY`压缩参数,并将压缩质量设置为50。
Makefile解释:
1. `CC=g++`定义了编译器为g++。
2. `CFLAGS=-I/root/opencv-4.5.1/include/opencv4`定义了头文件路径。
3. `LDFLAGS=-L/root/opencv-4.5.1/lib `pkg-config opencv4 --cflags --libs``定义了库文件路径和链接库。
4. `TARGET=compressphoto`定义了目标文件名为compressphoto。
5. `all: $(TARGET)`指定了默认的编译目标为$(TARGET)。
6. `$(TARGET): $(TARGET).cpp`定义了目标文件的依赖关系,即目标文件依赖于$(TARGET).cpp。
7. `$(CC) -o $@ $< $(CFLAGS) $(LDFLAGS)`定义了编译目标的命令,其中$@表示目标文件名,$<表示第一个依赖文件,$(CFLAGS)和$(LDFLAGS)分别表示编译选项和链接选项。
8. `clean`指定了清除目标文件的命令,即删除$(TARGET)文件。
阅读全文