// Seg.cpp
#include "stdafx.h"
#include "Seg.h"
#include <io.h>
#include <errno.h>
#include <math.h>
#include <direct.h>
// ***************************************************************
// DIBAPI version: 1.0 ? date: 03/09/2008
// -------------------------------------------------------------
// 读取txt文本文件
// -------------------------------------------------------------
// Copyright (C) 2008 - All Rights Reserved
// ***************************************************************
//
// ***************************************************************
long WINAPI READTEXT(CString lpszName,LaserPoint *lPoint)
{
CStdioFile file;
file.Open(lpszName,CFile::modeRead);
int i=0;
CString str;
double sx,sy,sz;/*double sx1,sy1,sz1;*/
long sign;/*long sign1;*/
int line=0;
// /*
while(file.ReadString(str))
{
sscanf(str,"%lf%lf%lf%ld",&sx,&sy,&sz,&sign);
// sscanf(str,"%lf%lf%lf%ld%lf%lf%lf%ld",&sx,&sy,&sz,&sign,&sx1,&sy1,&sz1,&sign1);
lPoint[i].x=sx;
lPoint[i].y=sy;
lPoint[i].z=sz;
lPoint[i].sign=sign;
i++;
// lPoint[i].x=sx1;
// lPoint[i].y=sy1;
// lPoint[i].z=sz1;
// lPoint[i].sign=sign1;
// i++;
line++;
}
// */
/*
while(file.ReadString(str))
// {
sscanf(str,"%lf",&sz);
lPoint[i].z=sz;
file.ReadString(str);
sscanf(str,"%lf",&sx);
lPoint[i].x=sx;
file.ReadString(str);
sscanf(str,"%lf",&sy);
lPoint[i].y=sy;
i++;
line++;
//}
*/
file.Close();
return (i);
}
// ***************************************************************
// DIBAPI version: 1.0 ? date: 03/13/2008
// -------------------------------------------------------------
// 保存TXT文本
// -------------------------------------------------------------
// Copyright (C) 2008 - All Rights Reserved
// ***************************************************************
//
// ***************************************************************
VOID WINAPI SaveTxt(CString lpszName,LaserPoint *Result,LONG num)
{
FILE* outfile;
if((outfile = fopen(lpszName,"w")) == NULL)
{
return;
}
int i;
for(i=0;i<num;i++)
{
fprintf(outfile,"%lf\t",Result[i].x);
fprintf(outfile,"%lf\t",Result[i].y);
fprintf(outfile,"%lf\t",Result[i].z);
fprintf(outfile,"%d\n",Result[i].sign);
}
fclose(outfile);
}
// ***************************************************************
// Seg version: 1.0 ? date: 03/22/2008
// -------------------------------------------------------------
// 形态学膨胀
// -------------------------------------------------------------
// Copyright (C) 2008 - All Rights Reserved
// ***************************************************************
//
// ***************************************************************
BOOL GrayDialation(double* lpDIBBits,LONG lWidth,LONG lHeight,int mode,double *structure)
{
double* lpSrc;
double* lpDec;
double* lpNewDIBBits;
HLOCAL hNewDIBBits;
LONG i,j,k,l;
hNewDIBBits=LocalAlloc(LHND,lWidth*lHeight*sizeof(double));
if(hNewDIBBits==NULL)
{
return false;
}
lpNewDIBBits=(double *)LocalLock(hNewDIBBits);
lpDec=(double *)lpNewDIBBits;
memcpy(lpNewDIBBits,lpDIBBits,lWidth*lHeight*sizeof(double));
if(mode==0)
{
for(i=0;i<lHeight;i++)
{
for (j=1;j<lWidth-1;j++)
{
lpSrc=(double *)lpDIBBits+lWidth*i+j;
lpDec=(double *)lpNewDIBBits+lWidth*i+j;
if(*lpSrc!=0)
{
double maxpixel=0;
for(k=0;k<3;k++)
{
if(*(lpSrc+k-1)!=0)
{
double pixel=(double)(*(lpSrc+k-1)+structure[k]);
if(pixel>maxpixel)
{
maxpixel=pixel;
}
}
}
*lpDec=maxpixel;
}
}
}
}
else if(mode==1)
{
for(i=1;i<lHeight-1;i++)
{
for (j=0;j<lWidth;j++)
{
lpSrc=(double *)lpDIBBits+lWidth*i+j;
lpDec=(double *)lpNewDIBBits+lWidth*i+j;
if(*lpSrc!=0)
{
double maxpixel=0;
for(k=0;k<3;k++)
{
if(*(lpSrc+(k-1)*lWidth)!=0)
{
double pixel=(double)(*(lpSrc+(k-1)*lWidth)+structure[k]);
if(pixel>maxpixel)
{
maxpixel=pixel;
}
}
}
*lpDec=maxpixel;
}
}
}
}
else
{
for(i=1;i<lHeight-1;i++)
{
for (j=1;j<lWidth-1;j++)
{
lpSrc=(double *)lpDIBBits+lWidth*i+j;
lpDec=(double *)lpNewDIBBits+lWidth*i+j;
//if(*lpSrc!=0)
//{
double maxpixel=0;
for(k=0;k<3;k++)
{
for(l=0;l<3;l++)
{
if(structure[k+l]==-1)
{
continue;
}
//if(*(lpSrc+(k-1)*lWidth+l-1)!=0)
//{
double pixel=(double)(*(lpSrc+(k-1)*lWidth+l-1)+structure[3*k+l]);
if(pixel>maxpixel)
{
maxpixel=pixel;
}
//}
}
}
*lpDec=maxpixel;
//}
}
}
}
memcpy(lpDIBBits,lpNewDIBBits,lWidth*lHeight);
LocalUnlock(hNewDIBBits);
LocalFree(hNewDIBBits);
return true;
}
// ***************************************************************
// DIBAPI version: 1.0 ? date: 03/08/2008
// -------------------------------------------------------------
// 灰度形态学腐蚀
// -------------------------------------------------------------
// Copyright (C) 2008 - All Rights Reserved
// ***************************************************************
//
// ***************************************************************
BOOL GrayErosion(double* lpDIBBits,LONG lWidth,LONG lHeight,int mode,double *structure)
{
double* lpSrc;
double* lpDec;
double* lpNewDIBBits;
HLOCAL hNewDIBBits;
LONG i,j,k,l;
hNewDIBBits=LocalAlloc(LHND,lWidth*lHeight*sizeof(double));
if(hNewDIBBits==NULL)
{
return false;
}
lpNewDIBBits=(double *)LocalLock(hNewDIBBits);
lpDec=(double *)lpNewDIBBits;
memcpy(lpNewDIBBits,lpDIBBits,lWidth*lHeight*sizeof(double));
if(mode==0)
{
for(i=0;i<lHeight;i++)
{
for (j=1;j<lWidth-1;j++)
{
lpSrc=(double *)lpDIBBits+lWidth*i+j;
lpDec=(double *)lpNewDIBBits+lWidth*i+j;
if(*lpSrc!=0)
{
double minpixel=10000;
for(k=0;k<3;k++)
{
if(*(lpSrc+k-1)!=0)
{
double pixel=(double)(*((lpSrc+k-1))-structure[k]);
if(pixel<minpixel)
{
minpixel=pixel;
}
}
}
*lpDec=minpixel;
}
}
}
}
else if(mode==1)
{
for(i=1;i<lHeight-1;i++)
{
for (j=0;j<lWidth;j++)
{
lpSrc=(double *)lpDIBBits+lWidth*i+j;
lpDec=(double *)lpNewDIBBits+lWidth*i+j;
if(*lpSrc!=0)
{
double minpixel=10000;
for(k=0;k<3;k++)
{
if(*(lpSrc+(k-1)*lWidth)!=0)
{
double pixel=(double)(*((lpSrc+(k-1)*lWidth))-structure[k]);
if(pixel<minpixel)
{
minpixel=pixel;
}
}
}
*lpDec=minpixel;
}
}
}
}
else
{
for(i=1;i<lHeight-1;i++)
{
for (j=1;j<lWidth-1;j++)
{
lpSrc=(double *)lpDIBBits+lWidth*i+j;
lpDec=(double *)lpNewDIBBits+lWidth*i+j;
if(*lpSrc!=0)
{
double minpixel=10000;
for(k=0;k<3;k++)
{
for(l=0;l<3;l++)
{
if(structure[k+l]==-1)
{
continue;
}
if(*(lpSrc+(k-1)*lWidth+l-1)!=0)
{
double pixel=(double)(*(lpSrc+(k-1)*lWidth+l-1)-structure[3*k+l]);
if(pixel<minpixel)
{
minpixel=pixel;
}
}
}
}
*lpDec=minpixel;
}
}
}
}
memcpy(lpDIBBits,lpNewDIBBits,lWidth*lHeight);
LocalUnlock(hNewDIBBits);
Lo
评论0