反复读取文件夹中的每张图片的rgb信息,每张图片建立一个对应的txt来保存读取到的rgb信息,保存之前删除对应的txt文本内容。c++实现不使用opencv,要求可以在ubuntu上可以运行
时间: 2024-04-15 21:27:22 浏览: 143
您可以使用C++的标准库和Linux系统的文件操作来实现这个功能。下面是一个示例代码:
```cpp
#include <iostream>
#include <fstream>
#include <dirent.h>
#include <cstring>
// 读取图片的RGB信息并保存到txt文件
void processImage(const char* imagePath) {
// 打开图片文件
std::ifstream imageFile(imagePath, std::ios::binary);
if (!imageFile) {
std::cerr << "Failed to open image: " << imagePath << std::endl;
return;
}
// 获取图片文件名
std::string imageName = imagePath;
size_t slashPos = imageName.find_last_of("/");
if (slashPos != std::string::npos) {
imageName = imageName.substr(slashPos + 1);
}
// 构建对应的txt文件名
std::string txtPath = imageName + ".txt";
// 删除已存在的txt文件
std::remove(txtPath.c_str());
// 创建txt文件并打开
std::ofstream txtFile(txtPath);
if (!txtFile) {
std::cerr << "Failed to create txt file: " << txtPath << std::endl;
return;
}
// 读取图片的RGB信息
unsigned char pixel[3];
while (imageFile.read(reinterpret_cast<char*>(pixel), sizeof(pixel))) {
// 将RGB信息写入txt文件
txtFile << static_cast<int>(pixel[0]) << " "
<< static_cast<int>(pixel[1]) << " "
<< static_cast<int>(pixel[2]) << std::endl;
}
// 关闭文件
imageFile.close();
txtFile.close();
std::cout << "Saved RGB information to: " << txtPath << std::endl;
}
// 遍历文件夹并处理每张图片
void processImagesInFolder(const char* folderPath) {
// 打开文件夹
DIR* dir = opendir(folderPath);
if (!dir) {
std::cerr << "Failed to open folder: " << folderPath << std::endl;
return;
}
dirent* entry;
// 遍历文件夹中的每个文件
while ((entry = readdir(dir)) != nullptr) {
if (entry->d_type == DT_REG) {
// 构建文件的完整路径
std::string filePath = folderPath;
filePath += "/";
filePath += entry->d_name;
// 处理图片文件
processImage(filePath.c_str());
}
}
// 关闭文件夹
closedir(dir);
}
int main() {
const char* folderPath = "/path/to/your/folder"; // 替换为你的文件夹路径
processImagesInFolder(folderPath);
return 0;
}
```
注意替换代码中的`/path/to/your/folder`为您的文件夹路径。此代码将遍历指定文件夹中的所有图像文件,对每个图像文件读取RGB信息并将其保存到同名的txt文件中。如果txt文件已经存在,将会在保存之前删除它。
请确保您的编译环境支持C++11标准或更高版本,并将代码保存为`.cpp`文件,然后使用`g++`编译器进行编译,例如:
```
g++ main.cpp -o image_processing
```
然后运行生成的可执行文件:
```
./image_processing
```
请注意,此代码没有使用OpenCV库,仅使用了C++的标准库和Linux系统的文件操作。
阅读全文