1. 程式人生 > >opencv3 c++影象處理小方法總結(持續更新)

opencv3 c++影象處理小方法總結(持續更新)

1.隨機擷取一張圖片的部分割槽域(擷取負樣本用的)

#include <opencv/highgui.h>
#include <iostream>

using namespace std;
using namespace cv;

/*
*迴圈隨機擷取一張圖片的部分割槽域
*@param src        待擷取影象
*@param    dirW    截圖寬
*@param dirH    截圖高
*@param roiNum    擷取張數
*/
void getRandomRoi(Mat& src, int dirW, int dirH,int roiNum) 
{
    if (roiNum <= 0 || dirW<0 || dirW>src.cols || dirH<0 || dirH>src.rows)
    {
        cout << "params error" << endl;
        return;
    }

    //roi圖片儲存路徑
    string savePath = "D://roi//";
    RNG rng;
    for (int i = 0; i < roiNum; i++)
    {
        //隨機決定roi的起點x,y 保證在原影象範圍內
        int x = rng.uniform(0, src.cols - dirW);
        int y = rng.uniform(0, src.rows - dirH);
        Mat roi = src(Rect(x, y, dirW, dirH));
        //儲存
        string fileName = savePath + to_string((long long)i) + ".jpg";
        imwrite(fileName, roi);
    }
}