for (size_t i = 0; i < fn.size(); ++i) { Mat img = imread(fn[i], IMREAD_UNCHANGED); string compress_path = "/root/photo/compressphoto/" + fn[i].substr(fn[i] .find_last_of("/\\") + 1); imwrite(compress_path, img, { IMWRITE_JPEG_QUALITY, 10 }); } ;这段代码什么意思,有什么作用
时间: 2023-05-29 11:02:56 浏览: 105
这段代码是一个循环,遍历一个包含文件名的字符串向量fn,取出每个文件名,读取该文件并存储为一个OpenCV的Mat对象img,然后将该图像压缩为JPEG格式,压缩质量为10,并将压缩后的图像保存在指定的目录下。该代码的作用是将指定目录下的图片进行批量压缩,并保存到指定的目录下,以节省存储空间。
相关问题
Mat img = imread(fn[i], IMREAD_UNCHANGED是什么意思,有什么用
這是一個 OpenCV 中的函數,用來讀取圖像。其中,IMREAD_UNCHANGED 是一個參數,表示讀取圖像時不對圖像進行任何的修改和轉換,保持原始的狀態。這個參數通常用於讀取帶有 alpha 通道的圖像,或者讀取灰度圖像、彩色圖像等不同類型的圖像。
使用 IMREAD_UNCHANGED 參數可以確保讀取的圖像與原始的圖像完全一致,並且不會丟失任何的信息。這對於一些需要精確控制圖像處理操作的場合非常有用。例如,在一些需要對圖像進行複雜運算的算法中,需要讀取原始的圖像,以保證算法的正確性和準確性。
c语言编写用opencv将路径/root/photo中的.jpg图片压缩到路径/root/compressphoto中,给出相应程序和对应的Makefile文件,注意opencv文件处于/root/opencv-4.5.1文件夹中。并对每一行代码简单作用进行解释
程序:
```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库。
阅读全文