在linux系统下,用c语言编写用opencv将路径/root/photo/compressphoto中的.jpg图片解压缩到路径/root/photo/decompressphoto中,给出相应程序和对应的Makefile文件,注意opencv文件处于/root/opencv-4.5.1文件夹中。要求代码简洁易懂并说明效果
时间: 2023-05-27 22:07:15 浏览: 105
程序如下:
```c
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv)
{
// 设置解压缩路径
String input_folder = "/root/photo/compressphoto/";
String output_folder = "/root/photo/decompressphoto/";
// 打开输入路径
DIR* dir = opendir(input_folder.c_str());
if (!dir)
{
printf("无法打开输入路径\n");
return -1;
}
// 遍历输入路径中的所有文件
struct dirent* entry;
while ((entry = readdir(dir)) != NULL)
{
String filename = entry->d_name;
// 如果是.jpg文件,则进行解压缩
if (filename.find(".jpg") != std::string::npos)
{
// 读取压缩后的图片
Mat img_compressed = imread(input_folder + filename, IMREAD_UNCHANGED);
if (img_compressed.empty())
{
printf("无法读取压缩后的图片:%s\n", filename.c_str());
continue;
}
// 解压缩图片
Mat img_decompressed;
cv::imdecode(img_compressed, IMREAD_UNCHANGED, &img_decompressed);
if (img_decompressed.empty())
{
printf("无法解压缩图片:%s\n", filename.c_str());
continue;
}
// 写出解压缩后的图片
if (!imwrite(output_folder + filename, img_decompressed))
{
printf("无法写出解压缩后的图片:%s\n", filename.c_str());
continue;
}
printf("成功解压缩图片:%s\n", filename.c_str());
}
}
closedir(dir);
return 0;
}
```
Makefile文件如下:
```Makefile
# 编译器
CC = g++
# 头文件路径
INCLUDE_PATH = -I/root/opencv-4.5.1/include
# 库文件路径
LIBRARY_PATH = -L/root/opencv-4.5.1/lib
# 库文件
LIBRARY = -lopencv_core -lopencv_highgui -lopencv_imgcodecs
# 编译选项
CFLAGS = -Wall -g -std=c++11 $(INCLUDE_PATH) $(LIBRARY_PATH) $(LIBRARY)
# 目标文件
TARGET = decompressphoto
# 源文件
SOURCE = decompressphoto.cpp
# 默认目标
.DEFAULT_GOAL := $(TARGET)
$(TARGET): $(SOURCE)
$(CC) $(CFLAGS) -o $@ $<
clean:
rm -f $(TARGET)
```
这个程序可以将路径`/root/photo/compressphoto`中的所有`.jpg`文件解压缩到路径`/root/photo/decompressphoto`中。程序首先打开输入路径,然后遍历输入路径中的所有文件,如果是`.jpg`文件,则进行解压缩,然后将解压缩后的图片写出到输出路径中。程序使用了OpenCV的`imread`和`imwrite`函数来读取和写出图片,使用了`imdecode`函数来解压缩图片。Makefile文件使用了g++编译器,指定了头文件路径和库文件路径,并链接了OpenCV的核心库、高级GUI库和图像编解码库。
阅读全文