昊虹君 发表于 2022-10-28 12:43

利用C++标准库<sstream>中的类stringstream实现OpenCV下的图片批量读取

利用C++标准库<sstream>中的类stringstream实现OpenCV下的图片批量读取

说明:本博文的代码要求图片的名字有规律,如果您需要批量读取图片的名字没有规律,可参考下面这篇博文:
https://www.hhai.cc/thread-102-1-1.html

关于类stringstream的详细介绍,请参见链接 https://www.hhai.cc/thread-100-1-1.html

如果您认真阅读了上面这个链接对类stringstream的介绍,那么就很容易实现“利用C++标准库中的类stringstream实现OpenCV下的图片批量读取”的程序了。

现在我们要读取以下图片:
http://pic1.hhai.cc/pic1/2022/2022-10/0008/081.png

那么在详细了解类stringstream的使用后,我们便很容易写出批量读取以上图片的代码。
关键是如何把图片的名字批量生成,我们可以利用类stringstream将图片名字中的数值部分生成。
代码如下:

//出处:昊虹AI笔记网(hhai.cc)
//用心记录计算机视觉和AI技术

//博主微信/QQ 2487872782
//QQ群 271891601
//欢迎技术交流与咨询

//OpenCV版本 OpenCV3.0

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

#defineNUM13    //读取image的个数
int main()
{
        Mat image;
        string ImgName;
        int n = 1;
        while (n <= NUM)   //13
        {
                ImgName = "flower-";
                //int 转换string
                stringstream ss;
                string str;
                ss << n;
                ss >> str;

                ImgName = ImgName + str;
                ImgName = "F:/material/images/flower-01/" + ImgName + ".jpg";
                cout << "读取:" << ImgName << endl;
                image = imread(ImgName);//读取图片
                if (image.data == 0)
                {
                        printf("图片读取失败\n\n");
                }
                else
                {
                        printf("图片读取成功\n\n");
                }
                n++;
        }

        waitKey(0);
        system("pause");
        return 0;
}

上面的代码很简单,没什么好多说的。
代码中用到的图片文件百度网盘下载链接:
https://pan.baidu.com/s/1piFDu5ZmQQzXy8P_YpGaiQ?pwd=u1fx

代码运行结果如下:
http://pic1.hhai.cc/pic1/2022/2022-10/0008/082.png
结果说明:
由于咱们的文件夹中不存在“flower-11.jpg”和“flower-12.jpg”,所以程序提示读取失败。

如果您需要批量读取图片的名字没有规律,可参考博文:
https://www.hhai.cc/thread-102-1-1.html


页: [1]
查看完整版本: 利用C++标准库<sstream>中的类stringstream实现OpenCV下的图片批量读取