生成结果
代码实现
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
const int nNum = 7;
const int nWs[nNum] = { 256,512,1024,2048,4096,8192,16384 };
const int nHs[nNum] = { 256,512,1024,2048,4096,4096,4096 };
void setValue(Mat im, int value, Rect rc)
{
for (int y = rc.tl().y; y < rc.br().y; y++)
{
for (int x = rc.tl().x; x < rc.br().x; x++)
{
im.at<char>(y, x) = value;
}
}
}
int main()
{
//制作256*256,512*512,1024*1024,2048*2048,4096*4096,8192*4096,16384*4096的图像
int i = 0;
int nValue = 255;
for (; i < nNum; i++)
{
Mat imRaw(nHs[i], nWs[i], CV_8UC1);
imRaw.setTo(0);
//一张全黑的图
Mat im0 = imRaw.clone();
imwrite("blob/"+to_string(i) + "/0.bmp", im0);
//一张3个blob的图
Mat im3 = imRaw.clone();
for (int x = 0; x < 3; x++)
{
Rect rc((x+1) * nWs[i] / 4, nHs[i] / 2, 5, 5);
setValue(im3, nValue, rc);
}
imwrite("blob/" + to_string(i) + "/3.bmp", im3);
//一张9个blob的图
Mat im9 = imRaw.clone();
for (int y = 0; y < 3; y++)
{
for (int x = 0; x < 3; x++)
{
Rect rc((x+1) * nWs[i] / 4, (y+1) * nHs[i] / 4, 5, 5);
setValue(im9, nValue, rc);
}
}
imwrite("blob/" + to_string(i) + "/9.bmp", im9);
//一张100个blob的图
int s = 10;
Mat im100 = imRaw.clone();
for (int y = 0; y < s; y++)
{
for (int x = 0; x < s; x++)
{
Rect rc((x+1) * nWs[i] / (s+1), (y+1) * nHs[i] / (s+1), 5, 5);
setValue(im100, nValue, rc);
}
}
imwrite("blob/" + to_string(i) + "/100.bmp", im100);
if (i > 4)
{
//blob 多
s = 100;
Mat im10000 = imRaw.clone();
for (int y = 0; y < s; y++)
{
for (int x = 0; x < s; x++)
{
Rect rc((x + 1) * nWs[i] / (s + 1), (y + 1) * nHs[i] / (s + 1), 5, 5);
setValue(im10000, nValue, rc);
}
}
imwrite("blob/" + to_string(i) + "/10000.bmp", im10000);
//blob 面积大
for (int y = 0; y < s; y++)
{
for (int x = 0; x < s; x++)
{
Rect rc((x + 1) * nWs[i] / (s + 1), (y + 1) * nHs[i] / (s + 1), 50, 20);
setValue(im10000, nValue, rc);
}
}
imwrite("blob/" + to_string(i) + "/10000-2.bmp", im10000);
}
//全白
Mat im128 = imRaw.clone();
im128.setTo(nValue);
imwrite("blob/" + to_string(i) + "/all.bmp", im128);
}
return 0;
}