📄 circle.cpp
字号:
#include "cimg.h"
using namespace cimg_library;
int main()
{
CImg<unsigned char> img("cir.bmp"); CImg<> edge2=img.get_channel(0);
CImg<> midx=img.get_channel(0); CImg<> midy=img.get_channel(0);
CImg<> blur=img.get_channel(0); CImg<unsigned char> graph("graphcir.bmp");
/**************************** edge detection *************************************/
int a=0, n=0, x=1, y=1, i=1, j=1;
int threshold=80;
for (y=1; y<img.height-1; y++)
{
for (x=1; x<img.width-1; x++)
{
edge2(x,y)=255;
}
}
x=1; y=1;
for (y=1; y<img.height-1; y++)
{
for (x=1; x<img.width-1; x++)
{
n=((2*img(x-1,y))-img(x,y)-(2*img(x+1,y))-img(x+2,y)+(2*img(x+3,y)))/7;
midx(x,y)=n;
}
}
x=1; y=1; a=0; n=0;
for (x=1; x<img.width-1; x++)
{
for (y=1; y<img.height-1; y++)
{
n=((2*img(x,y-1))-img(x,y)-(2*img(x,y+1))-img(x,y+2)+(2*img(x,y+3)))/7;
midy(x,y)=n;
}
}
for (j=1; j<img.height-1; j++)
{
for (i=1; i<img.width-1; i++)
{
if((midx(i-1,j)>0 && midx(i+1,j)<0) || (midx(i-1,j)<0 && midx(i+1,j)>0))
edge2(i,j)=0; //black
if((midy(i,j-1)>0 && midy(i,j+1)<0) || (midy(i,j-1)<0 && midy(i,j+1)>0))
edge2(i,j)=0; //black
}
}
/********************************** blur *************************************/
for (int m=1;m<edge2.height-1;m++)
{
for (int n=1;n<edge2.width-1;n++)
{
blur(n,m)=(edge2(n-1,m-1)+edge2(n,m-1)+edge2(n+1,m-1)+edge2(n-1,m)+edge2(n,m)
+edge2(n+1,m)+edge2(n-1,m+1)+edge2(n,m+1)+edge2(n+1,m+1))/9;
}
}
/********************** find center (a,b) of circle *****************************/
float Gy,Gx,t,q;
float pi=3.14159;
int b;
for (int yy=0; yy<blur.height; yy++)
{
for (int xx=0; xx<blur.width; xx++)
{
if (blur(xx,yy)>=80)
{
Gy=blur(xx,yy+1)-blur(xx,yy);
Gx=blur(xx+1,yy)-blur(xx,yy);
if ((Gy==0)&&(Gx==0)) q=pi/2;
else
if((Gy!=0)&&(Gx==0)) q=0;
else
q=atan(Gy/Gx);
for (int a=0; a<graph.width; a++)
{
t=tan(q);
b = (a-xx)*t + yy ;
if (b>=0 && b<=graph.height)
{
graph(a,b)+=4;
}
}
}
}
}
img.display("circle");
edge2.display("edge");
blur.display("blur edge");
graph.display("graph");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -