gpt4 book ai didi

c++ - 如何导航文件夹来读取图像?

转载 作者:行者123 更新时间:2023-12-03 12:50:48 26 4
gpt4 key购买 nike

我正在尝试对图片中的某些感兴趣区域进行采样。所以基本上每 30 个像素都会取 30x30 的 ROI,然后尝试获取大量样本图片。我尝试搜索相同的问题,并使用 VideoCapture 得到了答案,但它们不起作用。我只想知道如何导航目录并选择其中的每个图像应用我的方法对图像进行采样。然而我的 C++ 新手技能已经达到了极限。我的代码如下:

这是我想要应用于位于本身“C:\Projects\DataSet”的目录中的每个图像的方法

  ********fileName definition (part of ROI class)***********************



string ROI::fileName(size_t frameNumber)
{
const string filePrefix("C:\\Projects\\dataset-checkerboard\\Checkerboard\\");
const string fileSuffix(".png");
const size_t fileNumDigits(10);
stringstream ss;
ss << filePrefix;
ss << setw(fileNumDigits) << setfill('0') << frameNumber;
ss << fileSuffix;
return ss.str();

************sampleROI definition***************

Mat ROI::sampleROI(cv::Mat img, int width, int length){
cv::Mat sampled;
int limitx = img.cols - length;
int limity = img.rows - width;



for(int x = 0; x < limitx ; x += length){
for(int y = 0; y < limity ; y += width){


sampled = img(Rect(cv::Point(x,y),cv::Size(width,length)));
stringstream file;
file << "C:\\Projects\\dataset-checkerboard\\Samples\\img" << i << " atPixel " << Point(x,y) << ".png";
cv::imwrite(file.str(), sampled);

}


}



return sampled;
}


*****************************Main*******************************
ROI sampling ;

int main( int argc, char** argv )
{
int m = 0;
size_t t = 166;
for(size_t i = 4; i < t; ++i) { //0000000004.png is my first image
Mat i_t = imread(sampling.fileName(i), CV_LOAD_IMAGE_GRAYSCALE);
sampling.sampleROI(i_t,30,30, i); //samples 30x30 image
cout << "finished processing image: " << sampling.fileName(i) << endl;
}
return 0;
}

对于单张图片来说,它的效果非常好,上面的代码只是为了让您了解我想如何处理图像中的图片。

我想要一种方法来帮助我导航那里的每个图像,它们都按 0000000###.png 的顺序命名,图像计数为 166。使用 VideoCapture 不起作用。

编辑:主方法中的 for 循环似乎不会重复自身。

谢谢

最佳答案

我刚刚为这样的项目解决了类似的问题:

#include <sstream>
#include <string>
#include <iomanip>

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using std::string;
using std::stringstream;
using std::setfill;
using std::setw;

using cv::imread;
using cv::Mat;

string fileName(size_t frameNumber)
{
const string filePrefix("office/input/in");
const string fileSuffix(".jpg");
const size_t fileNumDigits(6);
stringstream ss;
ss << filePrefix;
ss << setw(fileNumDigits) << setfill('0') << frameNumber;
ss << fileSuffix;
return ss.str();
}
...
int main(int argc, const char* argv[])
{
// initial work, set t to last image number + 1
// i could start at 0 if your first image is 0
for(size_t i = 1; i < t; ++i) {
Mat i_t = imread(fileName(i), CV_LOAD_IMAGE_GRAYSCALE);
// Do work
}
return 0;
}

关于c++ - 如何导航文件夹来读取图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26899328/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com