blob算法测试图像生成

生成结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y3NEf1xU-1663725968720)(C:\Users\G04012\AppData\Roaming\Typora\typora-user-images\image-20220921100357807.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qU9gqHHi-1663725968721)(C:\Users\G04012\AppData\Roaming\Typora\typora-user-images\image-20220921100443498.png)]

代码实现

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

猜你喜欢

转载自blog.csdn.net/iamqianrenzhan/article/details/126967027