📄 code.cpp
字号:
#include "windows.h"
DLLEXPORT_API int __stdcall IsCoalChange(LPCSTR szFile1,LPCSTR szFile2)
{
return true;
}
void Bianyuan(LPCSTR szFile)
{
CImage image;
LPBYTE lpimc,lpImage;
int nWidth,nHeight,nWidthBytes,nBits;
//任意方向边缘检测
image.LoadFile((HWND)(AfxGetMainWnd()->m_hWnd),szFile);
CSize sizeTotal;
CPoint pt(0,0);
lpimc=image.FindDibBits();
nWidth=image.GetWidth();
nHeight=image.GetHeight();
nWidthBytes=image.GetWidthBytes();
nBits=image.GetBits();
dib=image.GetDIB();
LPBYTE lpdata;
if(dib==NULL)
{
MessageBox("No Image!",NULL,MB_OK);
return;
}
if(hImage!=NULL)
{
return;
}
//---------------------------------------------------------------
//请在此添加您需要的程序!
HLOCAL hNewDIBBits;
hNewDIBBits = LocalAlloc(LHND, nWidth * nHeight);
if (hNewDIBBits== NULL)
return ;
lpdata= (unsigned char * )LocalLock(hNewDIBBits);
memset((char *)lpdata, (BYTE)0, nWidth * nHeight);
//////////////////////////////////////////////////////
int k1,k2,i,j,k3,k4,k5,k6;
int i1,i2,j1,j2,ch[700],s,jm,j0,jj1,jj2,i0,im;
BYTE imag[704][576];
int g[4],max,kp;
int rx1,rx2,lx1,lx2,m,n,kps,xy[10][10],ii,jj,ii3,ii4;
float dx1,dx2,dy,a,b;
kp=10;
i1=10;i2=690;j1=60;j2=500;
for(i=i1;i<i2;i++)
{
for(j=j1;j<j2;j++)
{
//灰度信息
*(lpdata+j*nWidth+i)=(unsigned char)(0.299**(lpimc+j*nWidthBytes+nBits*i/8+2)+
0.587**(lpimc+j*nWidthBytes+nBits*i/8+1)+
0.114**(lpimc+j*nWidthBytes+nBits*i/8));
}
}
for(i=0;i<256;i++)
{
ch[i]=0;
}
for(i=i1;i<i2;i++)
{
for(j=j1;j<j2;j++)
{
if(*(lpdata+(j+1)*nWidth+i)-*(lpdata+(j-1)*nWidth+i)>0)
imag[i][j]=*(lpdata+(j+1)*nWidth+i)-*(lpdata+(j-1)*nWidth+i);
else
imag[i][j]=0;
}
}
s=0;
kp=20;
for(i=i1;i<i2;i++)
{
for(j=j1;j<j2;j++)
{
if(imag[i][j]>kp)
{
imag[i][j]=0;
}
else
imag[i][j]=*(lpdata+j*nWidth+i);
}
}
/* for(i=i1;i<i2;i++)
{
for(j=j1;j<j2;j++)
{
*(lpimc+j*nWidthBytes+nBits*i/8)=imag[i][j];
*(lpimc+j*nWidthBytes+nBits*i/8+1)=imag[i][j];
*(lpimc+j*nWidthBytes+nBits*i/8+2)=imag[i][j];
}
}
*/
////////////////////////////////////////////////////////////////////////////
jm=(j1+j2)/2;
for(j=jm;j<j2;j++) ch[j]=0;
for(i=i1;i<i2;i++)
{
for(j=jm;j<j2;j++)
{
if(imag[i][j]==0)
{
ch[j]++;
ch[j+1]++;
ch[j-1]++;
// break;
}
}
}
max=0;
j0=jm;
for(j=jm;j<j2-10;j++)
{
if(ch[j]>max)
{
max=ch[j];
j0=j;
}
}
for(i=i1;i<i2;i++)
{
*(lpimc+j0*nWidthBytes+nBits*i/8)=255;
*(lpimc+j0*nWidthBytes+nBits*i/8+1)=255;
*(lpimc+j0*nWidthBytes+nBits*i/8+2)=255;
}
jj1=j0;
/////////////////////////////////////////////////////////////////////////
jm=(j1+j2)/2;
for(j=jm;j>j1;j--) ch[j]=0;
for(i=i1;i<i2;i++)
{
for(j=jm;j>j1;j--)
{
if(imag[i][j]==0)
{
ch[j]++;
ch[j+1]++;
ch[j-1]++;
// break;
}
}
}
max=0;
j0=jm;
for(j=jm;j>j1+10;j--)
{
if(ch[j]>max)
{
max=ch[j];
j0=j;
}
}
for(i=i1;i<i2;i++)
{
*(lpimc+j0*nWidthBytes+nBits*i/8)=255;
*(lpimc+j0*nWidthBytes+nBits*i/8+1)=255;
*(lpimc+j0*nWidthBytes+nBits*i/8+2)=255;
}
jj2=j0;
/////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
for(i=i1;i<i2;i++)
{
for(j=j1;j<j2;j++)
{
if(abs(*(lpdata+(j)*nWidth+i+1)-*(lpdata+(j)*nWidth+i-1))>0)
imag[i][j]=abs(*(lpdata+(j)*nWidth+i+1)-*(lpdata+(j)*nWidth+i-1));
}
}
s=0;
kp=10;
for(i=i1;i<i2;i++)
{
for(j=j1;j<j2;j++)
{
if(imag[i][j]>kp)
{
imag[i][j]=0;
}
else
imag[i][j]=*(lpdata+j*nWidth+i);
}
}
j1=jj2;j2=jj1;
im=(i1+i2)/2;
for(i=i2;i>i2-150;i--) ch[i]=0;
a=float(599.0-616.0)/(404.0-199.0);
b=float(616.0-a*199.0);
/* for(j=j1-20;j<j2+20;j++)
{
i=a*j+b;
*(lpimc+j*nWidthBytes+nBits*i/8)=255;
*(lpimc+j*nWidthBytes+nBits*i/8+1)=255;
*(lpimc+j*nWidthBytes+nBits*i/8+2)=255;
}
*/
for(i=i2;i>i2-150;i--)
{
b=i-a*j1;
for(j=j1;j<j2;j++)
{
ii=a*j+b;
if(imag[ii][j]==0)
{
ch[ii]++;
ch[ii+1]++;
ch[ii-1]++;
// break;
}
}
}
max=0;
i0=im;
for(i=i2-10;i>i2-150;i--)
{
if(ch[i]>(j2-j1))
{
max=ch[i];
i0=i;
break;
}
}
b=i0-a*j1;
for(j=j1;j<j2;j++)
{
i=a*j+b;
if(i>0 && i<700 && j>0 &&j<576)
{
*(lpimc+j*nWidthBytes+nBits*i/8)=255;
*(lpimc+j*nWidthBytes+nBits*i/8+1)=255;
*(lpimc+j*nWidthBytes+nBits*i/8+2)=255;
}
}
rx1=a*j1+b;
rx2=a*j2+b;
///////////////////////////////////////////////////////////////////////
j1=jj2;j2=jj1;
im=(i1+i2)/2;
i1=10;
for(i=i1;i<i1+100;i++) ch[i]=0;
a=float(37.0-12.0)/(274.0-153.0);
b=float(37.0-a*163.0);
for(i=i1;i<i1+100;i++)
{
b=i-a*j1;
for(j=j1;j<j2;j++)
{
ii=a*j+b;
if(imag[ii][j]==0)
{
ch[ii]++;
ch[ii+1]++;
ch[ii-1]++;
// break;
}
}
}
max=0;
i0=100;
for(i=i1;i<i1+100;i++)
{
if(ch[i]>(j2-j1)/3)
{
max=ch[i];
i0=i;
break;
}
}
b=i0-(a*j2+a*j1)/2;
for(j=j1;j<j2;j++)
{
i=a*j+b;
if(i>0 && i<700 && j>0 &&j<576)
{
*(lpimc+j*nWidthBytes+nBits*i/8)=255;
*(lpimc+j*nWidthBytes+nBits*i/8+1)=255;
*(lpimc+j*nWidthBytes+nBits*i/8+2)=255;
}
}
lx1=a*j1+b;
lx2=a*j2+b;
/////////////////////////////////////////////////////////////////////
CString str;
FILE* fp;
kps=200;
kp=20;
fp = fopen("e:\\jg.txt","w");
for(i=10;i<690;i++)
for(j=j1;j<j2;j++)
{
g[0]=abs(*(lpdata+j*nWidth+i+1)-*(lpdata+j*nWidth+i-1));
g[1]=abs(*(lpdata+(j+1)*nWidth+i)-*(lpdata+(j-1)*nWidth+i));
g[2]=abs(*(lpdata+(j+1)*nWidth+i+1)-*(lpdata+(j-1)*nWidth+i-1));
g[3]=abs(*(lpdata+(j-1)*nWidth+i+1)-*(lpdata+(j+1)*nWidth+i-1));
max=0;
for(ii=0;ii<4;ii++)
{
if(g[ii]>max)
max=g[ii];
}
if(max>kp)
imag[i][j]=0;
else
imag[i][j]=*(lpdata+j*nWidth+i);
}
for(i=10;i<690;i++)
for(j=j1;j<j2;j++)
{
*(lpimc+j*nWidthBytes+nBits*i/8)=imag[i][j];
*(lpimc+j*nWidthBytes+nBits*i/8+1)=imag[i][j];
*(lpimc+j*nWidthBytes+nBits*i/8+2)=imag[i][j];
}
dy=float(j2-j1)/10.0;
dx1=float(rx1-lx1)/10.0;
dx2=float(rx2-lx2)/10.0;
// m=0;
// xy[m][n]=1;
n=0;
for(j=j1;j<j2-dy/2;j=j+dy)
{
//n=0;
i1=lx1;i2=lx2;
s=0;
// m=0;
for(i=0;i<10;i++)
{
if(i==0)
{
i1=lx1;
i2=lx2;
ii3=i1+dx1;
ii4=i2+dx2;
}
else
{
i1=i1+dx1;
i2=i2+dx2;
ii3=i1+dx1;
ii4=i2+dx2;
}
a=float(i1-i2)/float(j1-j2);
b=float(i1)-float(a*j1);
s=0;
for(jj=j;jj<j+dy;jj++)
{
int ii1,ii2;
ii=a*jj+b;
if(ii>0 && ii<700 && jj>0 && jj<570)
{
*(lpimc+jj*nWidthBytes+nBits*ii/8)=0;
*(lpimc+jj*nWidthBytes+nBits*ii/8+1)=0;
*(lpimc+jj*nWidthBytes+nBits*ii/8+2)=0;
}
for(ii=(i1+i2)/2;ii<(ii3+ii4)/2;ii++)
if(imag[ii][jj]==0)
s++;
}
// if(s>kps)
xy[i][n]=s;
// else
// xy[i][n]=0;
/*str.Format("%d ",xy[j][kk]);
fprintf(fp,str);*/
// m++;
}
for(ii=10;ii<700;ii++)
{
jj=j;
if(ii>0 && ii<700 && jj>0 && jj<570)
{
*(lpimc+jj*nWidthBytes+nBits*ii/8)=0;
*(lpimc+jj*nWidthBytes+nBits*ii/8+1)=0;
*(lpimc+jj*nWidthBytes+nBits*ii/8+2)=0;
}
}
n++;
/*str.Format("\n ");
fprintf(fp,str);*/
}
for(j=9;j>-1;j--)
{
for(int kk=0;kk<10;kk++)
{
str.Format("%d ",xy[kk][j]);
fprintf(fp,str);
}
str.Format("\n");
fprintf(fp,str);
}
fclose(fp);
::GlobalFree(dib);
LocalFree(hNewDIBBits);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -