新聞中心
求用C語(yǔ)言用Sobels算子方法編寫(xiě)圖像邊緣提取的程序算法!(急)
定義:每個(gè)像素的取值均為0或1,稱(chēng)這樣的圖像為二值圖像。
成都創(chuàng)新互聯(lián)-專(zhuān)業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性?xún)r(jià)比武都網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式武都網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋武都地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴(lài)。
算法:檢查所有像素,若該像素為物體上與背景接觸的像素(四連通像素中既有背景像素又有物體像素),則為邊界。
程序:
#define M 30
#define N 20
void edge(int image[M][N],int bianyuan[M][N])
{
int i,j;
int inner=1,outer=1;
for (i=0;iM;i++)/*清除數(shù)據(jù)*/
for(j=0;jN;j++)
bianyuan[i][j]=0;
for(i=1;iM-1;i++)
for(j=1;jN-1;j++)
{
inner=1;/*假設(shè)該像素或?yàn)槲矬w,或?yàn)楸尘?/
outer=1;
if(image[i-1][j]==0||image[i+1][j]==0||image[i][j-1]==0||image[i][j+1]==0)
inner=0;
if(image[i-1][j]==1||image[i+1][j]==1||image[i][j-1]==1||image[i][j+1]==1)
outer=0;
if(inner==0outer==0image[i][j]==1)/*像素周?chē)扔形矬w又有背景*/ bianyuan[i][j]=1;/*,且該像素為物體上的像素(image[i][j]==1),則定義為邊界*/
}
}
void output(int array[M][N],int n)
{
int i,j;
for(i=0;in;i++)
{
printf("\n");
for(j=0;jN;j++)
if(array[i][j]==1)
printf("1");
else
printf(" ");
}
}
void main()
{
int image[M][N]={{0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
{0,1,1,1,0,0,0,1,1,1,1,0,0,0,1,1,1,0,0},
{0,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,0},
{0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,0},
{0,0,1,1,1,1,0,0,0,1,1,1,1,1,0,1,1,1,0},
{0,1,1,1,1,1,1,0,0,1,1,1,0,0,1,1,1,1,0},
{0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0},
{0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,0},
{0,0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0},
{0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0}};
int bianyuan[M][N]={0};
int i,j;
printf("\nThe origianl image is:\n");
output(image,10);
edge(image,bianyuan);
printf("\nIts edge is:\n");
output(bianyuan,10);
}
寫(xiě)完了,又看一下,感覺(jué)edge函數(shù)太羅嗦了,不夠簡(jiǎn)練,想了一下,改成了下面的樣子,函數(shù)接口不變:
void edge(int image[M][N],int bianyuan[M][N])
{
int i,j;
for (i=0;iM;i++)
for(j=0;jN;j++)
bianyuan[i][j]=0;
for(i=1;iM-1;i++)
for(j=1;jN-1;j++)
{
int t=image[i-1][j]+image[i+1][j]+image[i][j-1]+image[i][j+1];
if(t0t4image[i][j]==1)/*周?chē)?個(gè)像素值介于1~3之間,*/
bianyuan[i][j]=1; /*且當(dāng)前像素為物體,則其必為邊界*/
}
}
希望這段代碼對(duì)你有所幫助
C語(yǔ)言編寫(xiě)外部中斷1為跳沿觸發(fā)的中斷初始化函數(shù)
1.SETB EA ;中斷總允許
SETB EX1 ;外中斷1允許
SETB IT1 ;脈沖方式(當(dāng)IT1為0時(shí),為電平方式)
然后就可以定義你要的初值。
2.邊沿觸發(fā)最大的特點(diǎn)是只在水平的邊緣改變外翻蓋獎(jiǎng)勵(lì)的那一刻是有效的。相對(duì)JK主站和從站中,良好的穩(wěn)定性的優(yōu)點(diǎn),激勵(lì)電平只需要保證在短時(shí)間內(nèi)向邊緣穩(wěn)定,外界干擾的窗口是小的。
c語(yǔ)言中area是什么函數(shù)
c語(yǔ)言里沒(méi)有這個(gè)函數(shù)area,但是可以自定義函數(shù)。
函數(shù)定義:
使用:
返回值類(lèi)型 函數(shù)名(類(lèi)型 變量名,類(lèi)型 變量名,…)
{
函數(shù)體;
return (數(shù)據(jù));
}
例如:
int sum(int a, int b)
{
return a + b;
}
擴(kuò)展資料
注意:
1、c語(yǔ)言一般根據(jù)函數(shù)的功能來(lái)取函數(shù)名,全部使用小寫(xiě)單詞,多個(gè)單詞之間用下劃線分隔,如:add_to_arr。
2、參數(shù)的個(gè)數(shù)、類(lèi)型由函數(shù)的功能決定,被調(diào)用時(shí)由調(diào)用者提供。如果函數(shù)不需要任何參數(shù)則寫(xiě)void,不要空著。
3、返回值類(lèi)型根據(jù)函數(shù)的結(jié)果決定,如果不需要返回值則寫(xiě)void。
4、如果函數(shù)的定義出現(xiàn)在調(diào)用之前,聲明可以省略。
5、函數(shù)聲明時(shí),參數(shù)的變量名可以省略。
6、如果不寫(xiě)返回值類(lèi)型(會(huì)有警告),則默認(rèn)為int類(lèi)型返回值。
c語(yǔ)言 用邊沿觸發(fā)使流水燈暫停,按鈕控制,按一下暫停,按一下繼續(xù)
#includereg52.h ?//引用庫(kù)文件
void delay() //延時(shí)函數(shù)
{
unsigned char i,j; ?//定義兩個(gè)變量,用于空循環(huán)
for(i=0;i200;i++)
for(j=0;j200;j++)
?;
}
unsigned char flag;
void main()
{
unsigned char i;
flag=1;
EA=1; ? //開(kāi)放總中斷
EX0=1; ?//允許使用外中斷
IT0=1; ?//選擇負(fù)跳變來(lái)觸發(fā)外中斷
while(1) ? //用于反復(fù)循環(huán)
{
for(i=0;i8;i++) ?
{
?P1=~(1i); ? ?
delay(); ?//調(diào)用延時(shí)函數(shù)
?while(flag!=1);
}
i=0;
? //
}
}
/**************************************************************
函數(shù)功能:外中斷T0的中斷服務(wù)程序
**************************************************************/
void int0(void) interrupt 0 using 0 //外中斷0的中斷編號(hào)為0
{
flag=~flag;
}
仿真圖:
樓主的采納率好低?。〞r(shí)間久了,估計(jì)給你回答的人會(huì)變少),不過(guò)我還是希望樓主能采納
文章題目:c語(yǔ)言的邊沿函數(shù) c語(yǔ)言的邊沿函數(shù)是什么
文章URL:http://fisionsoft.com.cn/article/hheppd.html