基于OpenCV批量修改一个文件所有图片像素

最近在做VOC数据集,需要将一个文件夹的图片统一像素,OpenCV下使用的是resize函数。

代码如下

#include "cv.h"
#include "highgui.h"
#include "math.h"
#include 
#include 
#include 
using namespace std;

void main()
{
    IplImage *src;
    IplImage *dst;
    WIN32_FIND_DATA p; //指向一个用于保存文件信息的结构体
    HANDLE h=FindFirstFile("E:\sample2\\*.jpg",&p); //FindFirstFile的返回值是一个句柄,第二个参数p是采用引用的方式,也就是说当这句话执行完毕后p就指向该文件*.jpg

    //由于p的成员变量只有文件名,而无文件路径,所以必须加上路径头
    string src_route_head="E:\sample2\\"; //源图像的路径头
    string dst_route_head="E:\sample2\\result\\";//目标图像的路径头
    string SourceRoute=src_route_head+p.cFileName; //包含了路径头和文件名的全路径
    string DestRoute=dst_route_head+p.cFileName;

    src=cvLoadImage(SourceRoute.c_str(), 1);//载入源图像
    dst=cvCreateImage(cvSize(416,416),src->depth,src->nChannels);//分配一个416*416的目标图像,resize后的结果将放在这里

    cvResize(src,dst);
    cvSaveImage(DestRoute.c_str(),dst);//保存dst

    //到目前为止,我们就已经完成了对目标文件夹中第一幅图像的resize处理与保存,接下来让该文件夹中其余图像也被处理

    while(FindNextFile(h,&p)) //p指针不断后移,寻找下一个、下下一个*.jpg
    {
        SourceRoute=src_route_head+p.cFileName; //route是路径头,imageroute是包含了路径头和文件名的全路径
        src=cvLoadImage(SourceRoute.c_str(), 1);//载入源图像

        cvResize(src,dst);

        DestRoute=dst_route_head+p.cFileName;
        cvSaveImage(DestRoute.c_str(),dst);//保存dst
    }
}

需要注意的是src=cvLoadImage(SourceRoute.c_str(), 1),载入源图像可以改变第二个参数,修改原图像的类型。cvsize(),可以修改你需要像素的值。

参考文献:

https://blog.csdn.net/u013534498/article/details/51377921

你可能感兴趣的:(opencv)