opencv读取文件夹图片,并将图片的地址保存在一个string[]数组里
时间: 2024-09-06 09:01:53 浏览: 49
在OpenCV库中,你可以使用`cv::glob`函数来获取指定文件夹下的所有图片路径,然后把这些路径存入`std::vector<std::string>`或者`string[]`数组。以下是一个简单的步骤示例:
```cpp
#include <opencv2/opencv.hpp>
#include <filesystem>
std::vector<std::string> imagesPaths;
// 定义文件夹路径
std::string folderPath = "path_to_your_folder";
// 使用cv::glob获取文件夹内所有.jpg或.png类型的图片路径
std::vector<cv::String> filePaths = cv::glob(folderPath + "/*.jpg"); // 或者 "*.png"
// 将路径添加到字符串向量中
for (const auto& filePath : filePaths) {
imagesPaths.push_back(filePath);
}
// 如果需要转换为string数组,可以这样做:
std::string* strArray = new std::string[imagesPaths.size()];
for (size_t i = 0; i < imagesPaths.size(); i++) {
strArray[i] = imagesPaths[i];
}
相关问题
opencvsharp读取文件夹图片,并将图片的地址保存在一个string[]数组里
在使用OpenCVSharp库读取文件夹中的图片并将它们的路径存储到String数组中,你需要遵循以下步骤:
首先,确保你已经安装了OpenCVSharp库,可以使用NuGet包管理器添加。
1. 引入必要的命名空间:
```csharp
using OpenCvSharp;
using System.IO;
using System.Collections.Generic;
```
2. 定义一个函数来遍历文件夹并收集图片路径:
```csharp
public static string[] GetImagePaths(string folderPath)
{
List<string> imagePaths = new List<string>();
if (!Directory.Exists(folderPath))
{
Console.WriteLine($"The folder path {folderPath} does not exist.");
return imagePaths; // 返回空数组或抛出异常
}
foreach (string filePath in Directory.GetFiles(folderPath, "*.jpg", SearchOption.AllDirectories))
{
// 只考虑.jpg格式的图片,你可以根据需要调整这里
if (System.IO.Path.GetExtension(filePath) == ".jpg")
imagePaths.Add(filePath);
}
return imagePaths.ToArray(); // 转换为数组返回
}
```
在这个函数中,`Directory.GetFiles`用于获取指定文件夹下的所有`.jpg`文件,然后将路径添加到`List<string>`中。最后,我们将其转换回字符串数组返回。
使用这个函数的方式如下:
```csharp
string folderPath = "your_folder_path";
string[] imageFiles = GetImagePaths(folderPath);
foreach (string imagePath in imageFiles)
{
Console.WriteLine(imagePath); // 打印每张图片的路径
}
```
有四个文件夹,代表四路相机拍摄的数据,怎么样用opencv4.6.0编写这四路相机的C++代码
假设你的四路相机数据分别保存在四个文件夹中,每个文件夹中包含一系列图片,你可以按照以下步骤编写 C++ 代码来读取这些数据:
1. 包含 OpenCV 的头文件:
```c++
#include <opencv2/opencv.hpp>
```
2. 定义相机数量和图片数量:
```c++
const int num_cams = 4;
const int num_imgs = 10;
```
3. 定义相机编号和图片编号的循环变量:
```c++
int cam_id, img_id;
```
4. 定义用于保存图片的变量:
```c++
cv::Mat images[num_cams][num_imgs];
```
5. 读取图片:
```c++
for (cam_id = 0; cam_id < num_cams; cam_id++) {
for (img_id = 0; img_id < num_imgs; img_id++) {
std::string filename = "cam" + std::to_string(cam_id) + "/img" + std::to_string(img_id) + ".jpg";
images[cam_id][img_id] = cv::imread(filename);
}
}
```
这个循环会依次读取每个相机的每张图片,并将其保存在对应的 `images` 数组元素中。
6. 处理图片:
你可以根据需要对图片进行处理,例如:
```c++
cv::Mat gray_images[num_cams][num_imgs];
for (cam_id = 0; cam_id < num_cams; cam_id++) {
for (img_id = 0; img_id < num_imgs; img_id++) {
cv::cvtColor(images[cam_id][img_id], gray_images[cam_id][img_id], cv::COLOR_BGR2GRAY);
}
}
```
这个循环会将每张图片转换为灰度图像,并将其保存在 `gray_images` 数组中。
7. 显示图片:
你可以使用 `cv::imshow` 函数来显示图片:
```c++
for (cam_id = 0; cam_id < num_cams; cam_id++) {
for (img_id = 0; img_id < num_imgs; img_id++) {
cv::imshow("Camera " + std::to_string(cam_id) + " Image " + std::to_string(img_id), images[cam_id][img_id]);
cv::waitKey(0);
}
}
```
这个循环会依次显示每张图片,并等待用户按下任意键后再显示下一张图片。
完整代码如下:
```c++
#include <opencv2/opencv.hpp>
const int num_cams = 4;
const int num_imgs = 10;
int main() {
int cam_id, img_id;
cv::Mat images[num_cams][num_imgs];
for (cam_id = 0; cam_id < num_cams; cam_id++) {
for (img_id = 0; img_id < num_imgs; img_id++) {
std::string filename = "cam" + std::to_string(cam_id) + "/img" + std::to_string(img_id) + ".jpg";
images[cam_id][img_id] = cv::imread(filename);
}
}
cv::Mat gray_images[num_cams][num_imgs];
for (cam_id = 0; cam_id < num_cams; cam_id++) {
for (img_id = 0; img_id < num_imgs; img_id++) {
cv::cvtColor(images[cam_id][img_id], gray_images[cam_id][img_id], cv::COLOR_BGR2GRAY);
}
}
for (cam_id = 0; cam_id < num_cams; cam_id++) {
for (img_id = 0; img_id < num_imgs; img_id++) {
cv::imshow("Camera " + std::to_string(cam_id) + " Image " + std::to_string(img_id), images[cam_id][img_id]);
cv::waitKey(0);
}
}
return 0;
}
```
注意:上述代码仅供参考,实际应用中可能需要根据具体情况进行修改。
阅读全文