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);
}
}