资源简介

配套坦克大战,小工具之地图生成,简单的直方图匹配,抛砖引玉。

资源截图

代码片段和文件信息

#include 
#include 

using namespace cv;
using namespace std;

//统计像素值的和,判断非黑的程度(count可能溢出)
int countPix(Mat img)
{
int count = 0;
for (int i = 0; i < img.rows; i++)
{
Vec3b *p = img.ptr(i);
for (int j = 0; j < img.cols; j++)
{
count += p[j][0] + p[j][1] + p[j][2];
}
}

return count;
}


int main()
{
// 对hue通道使用30个bin对saturatoin通道使用32个bin
int h_bins = 50; int s_bins = 60;
int histSize[] = { h_bins s_bins };
// hue的取值范围从0到256 saturation取值范围从0到180
float h_ranges[] = { 0 256 };
float s_ranges[] = { 0 180 };
const float* ranges[] = { h_ranges s_ranges };
// 使用第0和第1通道
int channels[] = { 0 1 };

// 【6】创建储存直方图的 MatND 类的实例:
MatND baseHist;
MatND testHist1;
MatND testHist2;
MatND testHist3;

Mat img_hsv temp_wall_hsv temp_iron_hsv temp_grass_hsv;
Mat img = imread(“stage3.png“);
resize(img img Size(1040 832));
Mat temp_wall = imread(“objectWallSmall.png“);
resize(temp_wall temp_wall Size(40 32));
Mat temp_iron = imread(“objectIronSmall.png“);
resize(temp_iron temp_iron Size(40 32));
Mat temp_grass = imread(“objectGrassSmall.png“);
resize(temp_grass temp_grass Size(40 32));

cvtColor(temp_wall temp_wall_hsv COLOR_BGR2HSV);
cvtColor(temp_iron temp_iron_hsv COLOR_BGR2HSV);
cvtColor(temp_grass temp_grass_hsv COLOR_BGR2HSV);

calcHist(&temp_wall_hsv 1 channels Mat() testHist1 2 histSize ranges true false);
normalize(testHist1 testHist1 0 1 NORM_MINMAX -1 Mat());

calcHist(&temp_iron_hsv 1 channels Mat() testHist2 2 histSize ranges true false);
normalize(testHist2 testHist2 0 1 NORM_MINMAX -1 Mat());

calcHist(&temp_grass_hsv 1 channels Mat() testHist3 2 histSize ranges true false);
normalize(testHist3 testHist3 0 1 NORM_MINMAX -1 Mat());


for (int y = 0; y < 26; y++)
{
for (int x = 0; x < 26; x++)
{
if (countPix(img(Rect(x * 40 y * 32 40 32))) < 70000)
{
continue;
}

cvtColor(img(Rect(x*40 y*32 40 32)) img_hsv COLOR_BGR2HSV);
calcHist(&img_hsv 1 channels Mat() baseHist 2 histSize ranges true false);
normalize(baseHist baseHist 0 1 NORM_MINMAX -1 Mat());

//进行图像直方图的对比
int compare_method = 2;
double base_test1 = compareHist(baseHist testHist1 compare_method);
double base_test2 = compareHist(baseHist testHist2 compare_method);
double base_test3 = compareHist(baseHist testHist3 compare_method);
//输出结果
//printf(“匹配结果如下:wall: %f iron: %f grass: %f \n“
// base_test1 base_test2 base_test3);



if (base_test1 > 1.1)
{
cout << “setMap(“ << x << “ “ << y << “ ‘W‘“ << “);“ << endl;
}
else if (base_test2 > 1.5)
{
cout << “setMap(“ << x << “ “ << y << “ ‘I‘“ << “);“ << endl;
}
else 
{
cout << “setMap(“ << x << “ “ << y << “ ‘G‘“ << “);“ << endl;
}


//imshow(“imgroi“ img(Rect(x * 40

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3361  2018-12-20 22:13  地图生成\BattleCity.cpp

     文件       3817  2018-12-05 19:14  地图生成\objectGrassSmall.png

     文件       1066  2018-11-01 17:11  地图生成\objectIronSmall.png

     文件       1887  2018-11-01 17:51  地图生成\objectWallSmall.png

     文件     205265  2018-12-06 12:49  地图生成\stage1.png

     文件     328505  2018-12-06 13:34  地图生成\stage2.png

     文件     478324  2018-12-06 12:54  地图生成\stage3.png

     目录          0  2019-01-28 09:44  地图生成

----------- ---------  ---------- -----  ----

              1022225                    8


评论

共有 条评论