南南17

导航

在图像中截取小图并保存

    实现以横向步长step_row、纵向步长step_col,在一幅大图上剪裁宽度为width、高度为height的小图像,图像命名形式为“数字(递增)_大图名”格式,将小图保存在argv[6]的文件夹中。

#include <opencv2/opencv.hpp>
#include <string>
#include <iostream>
using namespace std;
using namespace cv;

int main (int argc, char *argv[]){
    Mat img = imread(argv[1], 0);
    int width = atoi(argv[2]);
    int height = atoi(argv[3]);
    int step_col = atoi(argv[4]);
    int step_row = atoi(argv[5]);
    int index=0;
    stringstream name;
    for (int j = 0; j < img.cols; j = j + step_col){
        if (j + width > img.cols)
            break;
        for (int i = 0; i < img.rows; i = i + step_row){
                cout << j << endl;
                cout << i << endl;
                if (i + height > img.rows)
                    break;
                char str[256]; 
                snprintf(str, sizeof(str), "%d", index);
                string ss = str;
                name << argv[6] + ss + "_" + argv[1];
                imwrite(name.str(), img(Rect(j, i, width, height)));
                name.clear();
                name.str(std::string());
                index++;
            }        
    }
    return 0;
}

 

posted on 2019-02-20 14:19  南南17  阅读(256)  评论(0编辑  收藏  举报