#include
#include
#include
#include
#include
using namespace cv ;
using namespace std ;
struct point
{
int row;
int col ;
} p[1000000];//记录白点的点的集合 即钢
struct vadioline2//2条钢的结构体
{
int id;
int xbegin;
int xend;
int ybegin;
int yend;
int flag;//正确为1,异常为-1;
int cur_max;//最大斜率
int wei_max;//最大宽度
}bmp_line2[100];//7
int main()
{
//IplImage* imgSrc = cvLoadImage("D:\测试钢\2.bmp",0);//对图像的灰度化
IplImage* imgSrc = cvLoadImage("D:\Opencv_picture\1.bmp",0);//对图像的灰度化
/* cvNamedWindow("show") ;
cvShowImage("show",imgSrc) ;
cvWaitKey(0) ;*/
uchar* pixel = new uchar;
//int data =0;
int time = 0 ;
int i,j ;
int len = 0 ;// 白点的个数
//ofstream file("D:\\测试钢\\1.txt", ios::out);//打开一个文件,等同于file.open("test.txt", ios::out);
int ImageData[1000][1000] ;
memset(ImageData,0,sizeof(ImageData)) ;
for (i = 0; i < imgSrc->height; i++)//遍历图像所有像素点
{
for (j = 0; j < imgSrc->width; j++)
{
pixel = (uchar*)(imgSrc->imageData + i*imgSrc->widthStep+j);
//data = (int)(imgSrc->imageData + i*imgSrc->widthStep+j) ;
// cout << "pixel=" <<(*pixel)+0<< endl;//+0隐式转换为整型,否则会打印出字符
/// file <<(*pixel)+0<<" " ;
ImageData[j][i] = (*pixel)+0 ;
//ImageData[j][i] = data ;
/*time++ ;
if(time == 100)
{
file<<endl ;
}*/
if((*pixel)+0 == 255) //把所有的白点都存到了P素组
//if(data == 255) //把所有的白点都存到了P素组
{
p[len].row = j ;
p[len].col = i;
len++ ;
}
}
}
cout<<len<<endl ;
/*ofstream file1("D:\\测试钢\\11.txt", ios::out); //把点的坐标都记录下来 放到11.TXT的文本文档中
cout<<len<<endl ;
for(i = 0 ; i < len ;i++)
{
file1 <<p[i].x<<" "<<p[i].y<<" "<<endl ;
time++ ;
if(time == 100)
{
file1<<endl ;
}
}*/
int change_count = 0 ;
int change_flag = 0 ;
int change_first = 0;//是否是第一次发现是2条钢的那条直线
int change_final = 0 ;//是否是最后一次
int change_first_y = 0;
int change_middle_1_y = 0 ;
int change_middle_2_y = 0 ;
int change_final_y = 0 ;
int change_second_y = 0;
for(i = 0 ; i < 1000 ;i++)
{
change_count = 0 ;
//change_flag = change_count ;
for(j = 0 ; j < 1000 ;j++)
{
if(ImageData[i][j] > 0 && !change_flag)
{
change_count++ ;
change_flag = 1 ;
if(change_count == 1)
change_first_y = j ;
else
change_second_y = j ;
}
if(ImageData[i][j] == 0 && change_flag)
{
change_flag = 0 ;
if(change_count == 1)
{
change_middle_1_y = j ;
}
else
change_middle_2_y = j ;
}
if(change_count == 2)
{
change_final_y = j ;
break ;
}
}
if(change_count == 2 ) //说明是第一次发现是2条钢
{
change_flag = 1 ;
bmp_line2[0].xbegin = i ;//记录下开始坐标
bmp_line2[0].ybegin = change_first_y ;//记录下开始坐标
bmp_line2[0].yend = change_middle_1_y-1 ;
if(bmp_line2[0].yend - bmp_line2[0].ybegin > bmp_line2[0].wei_max) //算出最大的宽度
bmp_line2[0].wei_max = bmp_line2[0].yend - bmp_line2[0].ybegin ;
bmp_line2[1].xbegin = i ;//记录下开始坐标
bmp_line2[1].ybegin = change_second_y ;//记录下开始坐标
bmp_line2[1].yend = change_middle_2_y-1 ;
if(bmp_line2[1].yend - bmp_line2[1].ybegin > bmp_line2[1].wei_max)
bmp_line2[1].wei_max = bmp_line2[1].yend - bmp_line2[1].ybegin ;
}
if(change_count != 2 && change_first == 1) //说明是最后一次发现是2条钢
{
change_first = 0;
bmp_line2[0].xend = i ;//记录下结束坐标
bmp_line2[1].xend = i ;//记录下结束坐标
break;
}
}
ofstream file1("D:\\Opencv_picture\\1.txt", ios::out); //把点的坐标都记录下来 放到11.TXT的文本文档中
file1 <<bmp_line2[0].wei_max<<" "<<bmp_line2[1].wei_max<<" "<<endl ;
cvReleaseImage(&imgSrc);
//delete imgSrc ;
file1.close() ;
//file.close() ;
delete pixel;
delete ImageData ;
return 0 ;
}
//////
“Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\msvcp140d.dll”。已加载符号。
“Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\mfplat.dll”。无法查找或打开 PDB 文件。
“Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\d3d11.dll”。已加载符号。
“Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\mfreadwrite.dll”。已加载符号。
“Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\concrt140d.dll”。已加载符号。
“Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\vcruntime140d.dll”。已加载符号。
“Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\ucrtbased.dll”。无法查找或打开 PDB 文件。
“Opencv_judge.exe”(Win32): 已卸载“C:\Windows\System32\ucrtbased.dll”
“Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\mf.dll”。无法查找或打开 PDB 文件。
“Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\dxgi.dll”。已加载符号。
“Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\ucrtbased.dll”。无法查找或打开 PDB 文件。
“Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\cryptbase.dll”。已加载符号。
“Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\mfcore.dll”。已加载符号。
“Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\crypt32.dll”。已加载符号。
“Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\msasn1.dll”。已加载符号。
“Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\ksuser.dll”。已加载符号。
“Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\bcrypt.dll”。已加载符号。
“Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\imm32.dll”。已加载符号。
“Opencv_judge.exe”(Win32): 已加载“C:\Windows\System32\RTWorkQ.dll”。已加载符号。
0x00007FF6DD5D8C27 处的第一机会异常(在 Opencv_judge.exe 中): 0xC00000FD: Stack overflow (参数: 0x0000000000000001, 0x000000A7E3A03000)。
0x00007FF6DD5D8C27 处有未经处理的异常(在 Opencv_judge.exe 中): 0xC00000FD: Stack overflow (参数: 0x0000000000000001, 0x000000A7E3A03000)。
线程 0xb6c 已退出,返回值为 0 (0x0)。
线程 0x798 已退出,返回值为 0 (0x0)。
线程 0xdc0 已退出,返回值为 0 (0x0)。
程序“[13436] Opencv_judge.exe”已退出,返回值为 0 (0x0)。