列牛源碼
A. C++做一個小游戲,有源代碼的最好,謝謝
#include <iostream>
#include<fstream>
#include <ctime>
#include <cmath>
#include <stdlib.h>
#include<stdio.h> //時間 //文件
#include <string>
#define random(x)(rand()%x)
using namespace std;
void thunder(int Dif,int Row,int Column,char *USer)
{
int r,c,alls[22][22],backstage[22][22]={0};
srand((int)time(0));
for(r=1;r<=Row;r++) // 生成alls(0~1)1是雷
{
for(c=1;c<=Column;c++)
{
if(random(6)<1) {alls[r][c]=1;} else{alls[r][c]=0;};
}
};
for(r=0;r<=Row+1;r++) //生成 backstage(正確答案)
{
for(int c=0;c<=Column+1;c++)
{
if(alls[r][c]==1)
{
(int)backstage[r][c]='*'; //將1變為 * 代表雷
}
else
{
for(int i=r-1;i<=r+1;i++) //將0變為數字 (代表周圍雷數)
for(int j=c-1;j<=c+1;j++)
{
if(alls[i][j]!=alls[r][c]&&alls[i][j]==1){backstage[r][c]++;};
}
}; //else 結束
}; // for 結束
}; // for 結束
cout<<"======================*********================================"<<endl;
char surface[22][22]; //生成surface(用戶界面)
for(r=0;r<22;r++) //全部為零
for(c=0;c<22;c++)
{
surface[r][c]='0';
}
for(r=1;r<=Row;r++) //中間化 # 形成0包圍#的形式 (通過數 #-->(*||數字) 的個數 贏的時候停止循環)
for(c=1;c<=Column;c++)
{
surface[r][c]='#';
}
for(r=1;r<=Row;r++) //輸出 surface 界面 便於檢查
{
for(c=1;c<=Column;c++) {cout<<" "<<surface[r][c];};
cout<<endl;
};
cout<<"請按格式輸入"<<endl
<<"前兩個數字為坐標,最後一個數字「1」表示此位置為雷,「0」則表示不是。"<<endl
<<"如:1 3 1 表示一行三列是雷;2 4 0 表示二行四列不是雷"<<endl
<<"提示:當數字周圍雷都被掃出時,可再次按要求輸入此位置,可得到周圍數字。"<<endl;
long i=10000000L; //計算時間開始
clock_t start,finish;
double ration;
start=clock();
while(i--); //計算時間開始
int num=Row*Column; //計算#號個數
while(num!=0) //控制 是否點完所有位置
{
int x,y,judge;
cin>>x>>y>>judge;
if(alls[x][y]!=judge)
{
cout<<"you lose!!!"<<endl;
cout<<"The answer is:"<<endl;
for(r=1;r<=Row;r++) //輸了 輸出backstage 顯示正確答案
{
for(int c=1;c<=Column;c++)
{
cout<<" "<<(char)(backstage[r][c]==42?backstage[r][c]:backstage[r][c]+'0'); //輸出backstage
}
cout<<endl;
}
break;
}
else
{
if(alls[x][y]==1) {if(surface[x][y]=='#'){num--;}surface[x][y]='@'; } // 雷 判斷正確 顯示「@」;數「#」
else
{
if(backstage[x][y]!=0) // 數字 判斷正確 顯示數字
{
if(surface[x][y]=='#'){num--; surface[x][y]=backstage[x][y]+'0'; } // 數「#」
else
{
int lei_num=0;
for(int i=x-1;i<=x+1;i++) //數 數字周圍 雷的個數
for(int j=y-1;j<=y+1;j++)
{
if(surface[i][j]=='@')
lei_num++;
}
if(backstage[x][y]==lei_num) // 看數字周圍雷是否全部掃出 提示 顯示數字周圍
{
for(int i=x-1;i<=x+1;i++)
for(int j=y-1;j<=y+1;j++)
if(surface[i][j]=='#') //數「#」
{
surface[i][j]=backstage[i][j]+'0';
num--;
}
}
}
}
else // 數字為零時 顯示零周圍的零
{
if(surface[x][y]=='#'){num--;}; //數「#」
surface[x][y]=backstage[x][y]+'0';
for(int i=x-1;i<=x+1;i++) // 顯示零周圍的數字
for(int j=y-1;j<=y+1;j++)
if(surface[i][j]=='#') // 避免 死循環
{
surface[i][j]=backstage[i][j]+'0';
num--; //數「#」
}
for(int k=0;k<20;k++) //最多20層零 (點出最邊上的零)
{
for (int R=1;R<=Row;R++) //檢查所有零
for(int C=1;C<=Column;C++) //再次顯示零周圍的數字
{
if(surface[R][C]=='0')
{
for(int i=R-1;i<=R+1;i++)
for(int j=C-1;j<=C+1;j++)
{
if(surface[i][j]=='#') // 避免 死循環 數「#」
{
surface[i][j]=backstage[i][j]+'0';
num--;
}
}
}
} //匹配for 內
} //匹配 for 外
}//匹配else
}//匹配else
}//匹配els
cout<<endl;
cout<<"======================*********================================"<<endl;
for(r=1;r<=Row;r++) //輸出界面(已修改)
{
for(c=1;c<=Column;c++) {cout<<" "<<surface[r][c];};
cout<<endl;
};
} //匹配while
finish=clock(); //計算時間結束
ration=(double)(finish-start)/CLOCKS_PER_SEC; //時間變數
if(num==0) //所有
{
cout<<" You win! Congratulations!! "<<endl;
cout<<" Your time is: "<<ration<<endl;
if(Dif==1) //讀取 簡單掃雷 的存儲文件
{
string Name;
string name[6];
double Time,rang;
double times[6];
int i=0;
ifstream inf("掃雷 簡單.txt");
for(i=0;i<5;i++) //文件中信息導入到數組里
{
inf>>Name;inf>>rang>>Time;
name[i]=Name;
times[i]=Time;
}
inf.close();
name[5]=USer; //本輪玩家信息
times[5]=ration;
double t1=0;
string t2;
for(int j=0;j<5;j++) //冒泡排序法
{
for(i=0;i<5-j;i++)
{
if(times[i]>times[i+1])
{
t1=times[i];
times[i]=times[i+1];
times[i+1]=t1;
t2=name[i];
name[i]=name[i+1];
name[i+1]=t2;
}
}
}
ofstream outf("掃雷 簡單.txt");
for(i=0;i<5;i++) //將前五名玩家信息存儲到文件中
{
cout<<name[i]<<" "<<i+1<<" "<<times[i]<<endl;
outf<<name[i]<<" "<<i+1<<" "<<times[i]<<endl;
}
outf.close();
}
if(Dif==2) //讀取 一般掃雷 的存儲文件
{
string Name;
string name[6];
double Time,rang;
double times[6];
int i=0;
ifstream inf("掃雷 一般.txt");
for(i=0;i<5;i++) //文件中信息導入到數組里
{
inf>>Name;inf>>rang>>Time;
name[i]=Name;
times[i]=Time;
}
inf.close();
name[5]=USer; //本輪玩家信息
times[5]=ration;
double t1=0;
string t2;
for(int j=0;j<5;j++) //冒泡排序法
{
for(i=0;i<5-j;i++)
{
if(times[i]>times[i+1])
{
t1=times[i];
times[i]=times[i+1];
times[i+1]=t1;
t2=name[i];
name[i]=name[i+1];
name[i+1]=t2;
}
}
}
ofstream outf("掃雷 一般.txt");
for(i=0;i<5;i++) //將前五名玩家信息存儲到文件中 並輸出
{
cout<<name[i]<<" "<<i+1<<" "<<times[i]<<endl;
outf<<name[i]<<" "<<i+1<<" "<<times[i]<<endl;
}
outf.close();
}
if(Dif==3) //讀取 困難掃雷 的存儲文件
{
string Name;
string name[6];
double Time,rang;
double times[6];
int i=0;
ifstream inf("掃雷 困難.txt");
for(i=0;i<5;i++) //文件中信息導入到數組里
{
inf>>Name;inf>>rang>>Time;
name[i]=Name;
times[i]=Time;
}
inf.close();
name[5]=USer; //本輪玩家信息
times[5]=ration;
double t1=0;
string t2;
for(int j=0;j<5;j++) //冒泡排序法
{
for(i=0;i<5-j;i++)
{
if(times[i]>times[i+1])
{
t1=times[i];
times[i]=times[i+1];
times[i+1]=t1;
t2=name[i];
name[i]=name[i+1];
name[i+1]=t2;
}
}
}
ofstream outf("掃雷 困難.txt");
for(i=0;i<5;i++) //將前五名玩家信息存儲到文件中
{
cout<<name[i]<<" "<<i+1<<" "<<times[i]<<endl;
outf<<name[i]<<" "<<i+1<<" "<<times[i]<<endl;
}
outf.close();
}
}
}
void scale(int dif,char *User) //選擇難度
{
int row,column;
if(dif==1) {row=3;column=3;}
if(dif==2) {row=7;column=7;}
if(dif==3) {row=10;column=10;}
cout<<"The scale is: "<<row<<"*"<<column<<endl;
thunder(dif,row,column,User);
};
int main()
{
int Continue=1;
int difficulty;
char user[10];
cout<<" Welcom to the game! "<<endl
<<" 請輸入用戶名! "<<endl;
cin>>user;
while(Continue==1)
{
cout<<"=======================*******************======================="<<endl
<<" 請選擇難度! "<<endl
<<" 簡單——1 "<<endl
<<" 一般——2 "<<endl
<<" 困難——3 "<<endl;
cin>>difficulty;
scale(difficulty,user);
cout<<"繼續游戲——1 結束游戲——0"<<endl;
cin>>Continue;
}
return 0;
}
掃雷小游戲,自己編的代碼
B. 關於《源代碼》的一個理解
沒有很多士兵參與了源代碼計劃,博士跟主角說的話很多是謊言目的就是要讓主角去快速的完成任務。最後博士跟Goodwin說的才是真話,真正能適合,能匹配源代碼程序的人選就這么一個。而且參與任務的不是肖恩,肖恩是在火車上死於爆炸的。主角是一名直升機駕駛員,在阿富汗遇到襲擊出事故了,最後你也看到了全身什麼都沒了只剩下半個身體和一個沒有死亡的大腦。主角是使用了肖恩的部分記憶然後回到了由程序創造出來的過去尋找兇手。整個貫穿全片的所謂只有8分鍾記憶其實也是博士的謊言,看我的分析吧(純屬原創,謝絕拍磚)
首先上尉把那女孩帶下車那次火車是在遠處爆炸的,但是所謂的「程序」還在繼續執行對吧?還有上尉抓到了真凶並與之周旋搏鬥也延誤了兇手起爆炸彈的時間,真正讓上尉回到那個「太空艙」(對於上尉來說那其實也是虛幻的)是其死亡,如果上尉不死「程序」會一直發展下去那就是真正的平行空間了。所以說博士與女聯絡員Goodwin應該都是知道的,為了避免浪費時間產生多於的影響所以人為的規定任務時間只能是8分鍾,因為炸彈炸了而沒有找到兇手也就沒意義再讓「程序」繼續發展下去了。既然8分鍾的概念是人為的,那為什麼非要使上尉在炸彈爆炸前8分鍾前進入「程序」呢?為什麼不是10分鍾?20分鍾?這樣不是有更多時間去抓凶?個人理解是復原肖恩的記憶可能真的只能復原到8分鍾前了,可能是受損嚴重或是別的什麼原因,但絕不是「程序」本身的問題如果條件允許提前一天,2天,甚至更久都可以使主角進入任務中。
言歸正傳,根據2次任務的超時可以證明博士是在扯謊而聯絡員goodwin也應該知道,但做為軍方的實驗目的就是用「程序」來改變現實中的未來其他的都不重要,而且平行世界的情況博士他們也看不到的,只能存在於理論中。上尉可以通過在他腦中映射的圖像看到現實中的博士等人但是博士卻看不到上尉所經歷圖像,甚至在上尉腦中映射的自己在一個「太空艙」內博士他們也不知道片中已經表達了,估計跟主角之前做駕駛員的經歷有關虛擬的環境就像個駕駛艙。Goodwin關閉上尉生命系統應該是根據理論如果主角大腦死亡所有的一切就都沒有了,但是最後片尾的結局告訴大家沒那麼簡單,平行世界確實被「造」出來了,不管在另一個世界的主角大腦有沒有死亡。
最後,所謂只能運行8分鍾是假但博士人為的程序是死的只能根據主角大腦為依存的理論被證明是錯的。那之前的幾次任務製造出的平行世界會怎麼樣呢?這個就沒必要糾結了,反正上尉的意識在另一個平行世界得到了延續也泡到了靚妹,這也是觀眾所希望看到的。
C. 佛山專門做微信小程序開發的,專業一點的公司,我想做一個購買商品的微信小程序
一般情況下,小程序開發的費用由以下因素決定
小程序的類型有很多,例如商城類、資訊類、預約類等等,每一個類型的小程序需要的功能是不一樣的,例如商城類需要購物車、下單、付款、物流查詢功能,預約類的小程序,需要展示、預定、反饋等功能。所以,功能也是影響價格的因素之一。所以,小程序的具體費用,得在確定完你需要什麼功能之後,才能確定。
小程序通常都是由多個頁面組成的,但每個小程序需要多少個頁面,需要根據企業、商家的實際情況而定。例如,A公司需要3個頁面,B公司需要5頁面,因此它的費用是不一樣的,所以整體的價格得根據最後確定的需求來定。
開發方式
小程序的開發方式分為模板開發和定製開發:
模板開發,顧名思義,就是直接套用行業模板來進行開發的,由於是直接套用模板,因此開發工作並不復雜,所以價格上會便宜一點,價格大約是1000元-10000元左右。當然具體的價格得根據你的行業來確定。
定製開發小程序,就是獨立開發每一個頁面、每一項功能,因此開發工作較為復雜,耗時較長,所以價格上會貴一點,具體費用和需求有關,沒有一個特別固定的價格。小程序的功能越復雜,質量越高,報價越高,反之越低。一般小程序系統有兩種:一種是模板小程序,這種小程序系統的價格一般會在幾百到幾千不等,如目前一些用戶使用的自助小程序系統,不能過多要求,也不能大改動,因為已經成型,模板千篇一律,用戶體驗不高,界面沒有多少設計感,功能也限製得很死。
另一種就是定製型的,就是小程序系統所有的功能都是需要定製開發的,從零開發的,一般費用非常昂貴,根據客戶所要求的功能,可能要幾千到幾十萬不等,而且開發周期也比較長,但是無論如何,小程序的開發費用都要比APP應用開發要便宜一些。小程序開發的費用:一般幾千到幾萬不等、看具體要求。
其實開發小程序的價格主要取決於你要做多少頁面和要做的頁面和功能的復雜程度。
如果是行業內比較成熟的標准化系統就會相對便宜點。
如:餐飲行業類、酒店預約類的小程序實現簡單的功能一般在萬元左右,幾千塊錢就可以了,因為模板的功能已經相對豐富了。而簡單的企業展示類的一般三四千就可以了。
但如果是全部需要開發定製,且功能也比較復雜、繁瑣,周期比較長的話,一般都是幾萬甚至超過10萬,而且像這種是需要商家提出具體的需求服務商才能判斷出具體價格。
微信小程序的運營初期,很多用戶對於微信小程序都會抱有一定的好奇心理,企業需要抓住紅利期的這段時間,在這段時間內企業藉助小程序可開發一些有益於自身企業的應用,再加上趣味性、實用性,就能很容易吸引用戶前來關注,為企業帶來大批的潛在客戶。目前微信小程序主要分為兩個方面:
第1種是賣模板為主的網路公司。
優點是:價格低,幾千塊錢到萬元之間就能搞定,方便,能夠快速上線;
缺點是:修改功能麻煩,這里需要避免低價陷阱,不要到最後才發現模板性的修改功能所花的錢比買模板還貴,也是闊怕。而且不是獨立的,一個模本賣給很多商家用~ ,一旦出現木馬漏洞修復也沒有保障!嗯,大概就是這樣。哦,對了。還有模板不是永久使用的,一般每年都要交不少的年費。
第2種是主流的方式,定製開發為主的網路公司。
優點是:獨一無二的,專為你的企業或者店面定製的,功能你來定,要求你來定,後期修改bug方便,改東西也很方便,最重要的是永久使用權!
缺點是:相對價格比較高! 定製版的基本費用在上萬元到十幾萬不等!不過貴也有貴的道理吧,畢竟功能做的更全面更牛一點。
所以還是需要看貴公司的具體需求,希望可以幫到您!望採納!開發一個小程序主要有三種方式,三種方式的區別和費用我大概列一下:
1、小程序定製開發顧名思義就是根據你提出來的功能要求以及UI設計要求,專門定製出來的,具有個性化、唯一性的特點。而且源碼也會掌握在自己手裡,自建伺服器的話,數據的保密安全性都可以得到保障。唯一的缺點就是費用較高,但是貴有貴的道理,畢竟技術人員工資動輒1萬起步,一個小程序最起碼有前端、後端、UI設計人員才能開發完成的小程序,假如工期是一個月的話,光工資就要四五萬。再加上租伺服器一年3000-4000的費用,整體算下來,工期一個月左右的小程序定製開發費用要在5萬左右。
2、小程序模板——是小程序開發公司為了降低開發成本,事先開發出一套比較成熟,功能比較完善,並且會定期更新功能的小程序給商家使用,商家只需支付模板費用即可,無需租賃伺服器。模板費用一般在5000-8000之間。缺點是不能按照自己的要求修改功能和界面,優點是費用低、無需搭建伺服器、有專人維護。
3、小程序輕定製——這種方式是介於定製開發和模板之間的方式,也是很多商家都比較喜歡的合作模式,是在小程序模板的基礎上增加修改功能或界面,不但滿足了自己個性化的要求,又降低了開發成本,資料庫伺服器也是獨立出來的。
小程序模板目前已經做出來30+行業版本:分銷、電商、社區團購、瑜伽健身、美容、教育培訓、婚紗攝影、餐飲、酒店、家政、房地產、二手車等等,模板滿足不了需求還可以輕定製,花費最少的錢做個性化的定製。
希望能夠幫助到你。小程序開發既有免費的,也有¥399、¥599的,而貴的需要十幾萬。
不過即使免費的其實你需要投入昂貴的代價——你的時間以及試錯成本!身邊很多人總是想著自己學習一下然後搭建一個免費小程序,覺得這樣很劃算,但作為老闆或創業者的你,你的時間才是最寶貴的,小程序開發是一個技術活兒,如果你沒有寫代碼的功底,即使學1個月也做不出一個小程序。當然,簡易版的小程序是個例外,但簡易版的是很多學生過家家玩玩的,並不能作為商業用途,它的功能非常不完善的。
市面上也有很多價格低廉的小程序,報價從100到10000不等,傳統企業老闆因為不懂小程序,不知道如何挑選,不知道自己付了這些錢能否購買到一個物超所值的小程序。
企業選擇物優價廉的小程序需要滿足以下條件:
1. 小程序的功能齊全。
小程序是一種工具,如果這個工具少一些功能,那這個工具就是廢的,用不了。小程序一般分為餐飲小程序、電商小程序、企業展示小程序、游戲小程序,每個種類的小程序都有一些特定的功能,比如餐飲小程序需要點餐、排好、預約、支付、外賣等功能,你采購的小程序里是否這些功能都有。所以在你做小程序之前,你需要想清楚自己的小程序是用來做什麼的?需要哪些功能?有一些非常小白的企業老闆,覺得小程序是風口、其他企業都在,做所以自己也要做一個。但你問他需要哪些功能,他不知道。
2. 小程序的用戶體驗
包括頁面設計十分美觀、響應速度十分快、功能既簡潔又安全本人用過一些小程序,頁面設計非常low,土氣迎面撲來,讓我對品牌大打折扣。還有一些小程序,載入半天圖片出不來,我也是醉了。
3. 小程序的源代碼歸誰所有,伺服器的錢誰出、是否後期運維費用。
小程序開發有很多隱性成本,如果企業前提沒有和外包公司,很可能被坑。比如有些外包公司給的小程序是一個模板,源代碼是不給企業的,而且源代碼是放在共用的伺服器上,數據非常不安全。後期如果你需要修改某個功能,需要收取甚至比開發成本更高的運維費用,非常不劃算。所以每一項費用都需要詳細寫在合同里。
4. 性價比是否高
營銷圈最大的問題在於,產品和價格不標准化,同樣的小程序,有的外包公司報價¥1000,有的報價¥10000,企業根本弄不清楚1000元和10000元的小程序差異在哪裡。選擇貴的覺得不劃算,選擇便宜的又怕小程序不好用,猶豫不決。
D. 學習linux的步驟是怎樣的
對於Linux的學習,可以分為四個階段,Linux初級入門階段→Linux中級進階→Linux高級進階→Linux資深方向細化階段
第一階段:初級階段
初級階段需要把linux學習路線搞清楚,任何學習都是循序漸進的,所以學linux也是需要有一定的路線。
1. Linux基礎知識、基本命令;
2. Linux用戶及許可權基礎;
3. Linux系統進程管理進階;
4. linux高效文本、文件處理命令;
5. shell腳本入門
第二階段:中級進階
中級進階需要在充分了解linux原理和基礎知識之後,對上層的應用和服務進行深入學習,其中說到服務肯定涉及到網路的相關知識,是需要花時間學習的。
1. TCP/IP網路基礎;
2. Linux企業常用服務;
3. Linux企業級安全原理和防範技巧;
4. 加密/解密原理及數據安全、系統服務訪問控制及服務安全基礎;
5. iptables安全策略構建;
6. shell腳本進階;
7. MySQL應用原理及管理入門
第三階段:Linux高級進階
1. http服務代理緩存加速;
2. 企業級負載集群;
3. 企業級高可用集群;
4. 運維監控zabbix詳解;
5. 運維自動化學習;
第四階段:Linux資深方向細化
1. 大數據方向;
2. 雲計算方向;
3. 運維開發;
4. 自動化運維;
5. 運維架構師
以上是Linux的一個學習方向和路線,對於Linux學習是一個需要堅持的過程,也許通過自學或者培訓,3至6個月都可以把基本知識學會,但是重在實踐,深入的思考和不斷的摸索,你會發現Linux更多的美!
E. 求MATLAB代碼
MATLAB實用源代碼
1圖像的讀取及旋轉
A=imread('');%讀取圖像
subplot(2,2,1),imshow(A),title('原始圖像');%輸出圖像
I=rgb2gray(A);
subplot(2,2,2),imshow(A),title('灰度圖像');
subplot(2,2,3),imhist(I),title('灰度圖像直方圖');%輸出原圖直方圖
theta = 30;J = imrotate(I,theta);% Try varying the angle, theta.
subplot(2,2,4), imshow(J),title(『旋轉圖像』)
2邊緣檢測
I=imread('C:\Users\HP\Desktop\平時總結\路飛.jpg');
subplot(2,2,1),imshow(I),title('原始圖像');
I1=edge(I,'sobel');
subplot(2,2,2),imshow(I1),title('sobel邊緣檢測');
I2=edge(I,'prewitt');
subplot(2,2,3),imshow(I2),title('prewitt邊緣檢測');
I3=edge(I,'log');
subplot(2,2,4),imshow(I3),title('log邊緣檢測');
3圖像反轉
MATLAB 程序實現如下:
I=imread('xian.bmp');
J=double(I);
J=-J+(256-1);%圖像反轉線性變換
H=uint8(J);
subplot(1,2,1),imshow(I);
subplot(1,2,2),imshow(H);
4.灰度線性變換
MATLAB 程序實現如下:
I=imread('xian.bmp');
subplot(2,2,1),imshow(I);
title('原始圖像');
axis([50,250,50,200]);
axis on;%顯示坐標系
I1=rgb2gray(I);
subplot(2,2,2),imshow(I1);
title('灰度圖像');
axis([50,250,50,200]);
axis on; %顯示坐標系
J=imadjust(I1,[0.1 0.5],[]); %局部拉伸,把[0.1 0.5]內的灰度拉伸為[0 1]
subplot(2,2,3),imshow(J);
title('線性變換圖像[0.1 0.5]');
axis([50,250,50,200]);
grid on; %顯示網格線
axis on; %顯示坐標系
K=imadjust(I1,[0.3 0.7],[]); %局部拉伸,把[0.3 0.7]內的灰度拉伸為[0 1]
subplot(2,2,4),imshow(K);
title('線性變換圖像[0.3 0.7]');
axis([50,250,50,200]);
grid on; %顯示網格線
axis on; %顯示坐標系
5.非線性變換
MATLAB 程序實現如下:
I=imread('xian.bmp');
I1=rgb2gray(I);
subplot(1,2,1),imshow(I1);
title(' 灰度圖像');
axis([50,250,50,200]);
grid on;%顯示網格線
axis on;%顯示坐標系
J=double(I1);
J=40*(log(J+1));
H=uint8(J);
subplot(1,2,2),imshow(H);
title(' 對數變換圖像');
axis([50,250,50,200]);
grid on; %顯示網格線
axis on; %顯示坐標系
4.直方圖均衡化
MATLAB 程序實現如下:
I=imread('xian.bmp');
I=rgb2gray(I);
figure;
subplot(2,2,1);
imshow(I);
subplot(2,2,2);
imhist(I);
I1=histeq(I);
figure;
subplot(2,2,1);
imshow(I1);
subplot(2,2,2);
imhist(I1);
5. 線性平滑濾波器
用MATLAB實現領域平均法抑制雜訊程序:
I=imread('xian.bmp');
subplot(231)
imshow(I)
title('原始圖像')
I=rgb2gray(I);
I1=imnoise(I,'salt & pepper',0.02);
subplot(232)
imshow(I1)
title(' 添加椒鹽雜訊的圖像')
k1=filter2(fspecial('average',3),I1)/255; %進行3*3模板平滑濾波
k2=filter2(fspecial('average',5),I1)/255; %進行5*5模板平滑濾波k3=filter2(fspecial('average',7),I1)/255; %進行7*7模板平滑濾波
k4=filter2(fspecial('average',9),I1)/255; %進行9*9模板平滑濾波
subplot(233),imshow(k1);title('3*3 模板平滑濾波');
subplot(234),imshow(k2);title('5*5 模板平滑濾波');
subplot(235),imshow(k3);title('7*7 模板平滑濾波');
subplot(236),imshow(k4);title('9*9 模板平滑濾波');
6.中值濾波器
用MATLAB實現中值濾波程序如下:
I=imread('xian.bmp');
I=rgb2gray(I);
J=imnoise(I,'salt&pepper',0.02);
subplot(231),imshow(I);title('原圖像');
subplot(232),imshow(J);title('添加椒鹽雜訊圖像');
k1=medfilt2(J); %進行3*3模板中值濾波
k2=medfilt2(J,[5,5]); %進行5*5模板中值濾波
k3=medfilt2(J,[7,7]); %進行7*7模板中值濾波
k4=medfilt2(J,[9,9]); %進行9*9模板中值濾波
subplot(233),imshow(k1);title('3*3模板中值濾波');
subplot(234),imshow(k2);title('5*5模板中值濾波 ');
subplot(235),imshow(k3);title('7*7模板中值濾波');
subplot(236),imshow(k4);title('9*9 模板中值濾波');
7.用Sobel運算元和拉普拉斯對圖像銳化:
I=imread('xian.bmp');
subplot(2,2,1),imshow(I);
title('原始圖像');
axis([50,250,50,200]);
grid on; %顯示網格線
axis on;%顯示坐標系
I1=im2bw(I);
subplot(2,2,2),imshow(I1);
title('二值圖像');
axis([50,250,50,200]);
grid on;%顯示網格線
axis on;%顯示坐標系
H=fspecial('sobel');%選擇sobel運算元
J=filter2(H,I1); %卷積運算
subplot(2,2,3),imshow(J);
title('sobel運算元銳化圖像');
axis([50,250,50,200]);
grid on; %顯示網格線
axis on;%顯示坐標系
h=[0 1 0,1 -4 1,0 1 0]; %拉普拉斯運算元
J1=conv2(I1,h,'same');%卷積運算
subplot(2,2,4),imshow(J1);
title('拉普拉斯運算元銳化圖像');
axis([50,250,50,200]);
grid on; %顯示網格線
axis on; %顯示坐標系
8.梯度運算元檢測邊緣
用 MATLAB實現如下:
I=imread('xian.bmp');
subplot(2,3,1);
imshow(I);
title('原始圖像');
axis([50,250,50,200]);
grid on; %顯示網格線
axis on; %顯示坐標系
I1=im2bw(I);
subplot(2,3,2);
imshow(I1);
title('二值圖像');
axis([50,250,50,200]);
grid on; %顯示網格線
axis on; %顯示坐標系
I2=edge(I1,'roberts');
figure;
subplot(2,3,3);
imshow(I2);
title('roberts運算元分割結果');
axis([50,250,50,200]);
grid on; %顯示網格線
axis on; %顯示坐標系
I3=edge(I1,'sobel');
subplot(2,3,4);
imshow(I3);
title('sobel運算元分割結果');
axis([50,250,50,200]);
grid on; %顯示網格線
axis on; %顯示坐標系
I4=edge(I1,'Prewitt');
subplot(2,3,5);
imshow(I4);
title('Prewitt運算元分割結果 ');
axis([50,250,50,200]);
grid on; %顯示網格線
axis on; %顯示坐標系
9.LOG運算元檢測邊緣
用 MATLAB程序實現如下:
I=imread('xian.bmp');
subplot(2,2,1);
imshow(I);
title('原始圖像');
I1=rgb2gray(I);
subplot(2,2,2);
imshow(I1);
title('灰度圖像');
I2=edge(I1,'log');
subplot(2,2,3);
imshow(I2);
title('log運算元分割結果');
10.Canny運算元檢測邊 緣
用MATLAB程序實現如下:
I=imread('xian.bmp');
subplot(2,2,1);
imshow(I);
title('原始圖像')
I1=rgb2gray(I);
subplot(2,2,2);
imshow(I1);
title('灰度圖像');
I2=edge(I1,'canny');
subplot(2,2,3);
imshow(I2);
title('canny運算元分割結果');
11.邊界跟蹤 (bwtraceboundary函數)
clc
clear all
I=imread('xian.bmp');
figure
imshow(I);
title('原始圖像');
I1=rgb2gray(I); %將彩色圖像轉化灰度圖像
threshold=graythresh(I1); %計算將灰度圖像轉化為二值圖像所需的門限
BW=im2bw(I1, threshold); %將灰度圖像轉化為二值圖像
figure
imshow(BW);
title('二值圖像');
dim=size(BW);
col=round(dim(2)/2)-90; %計算起始點列坐標
row=find(BW(:,col),1); %計算起始點行坐標
connectivity=8;
num_points=180;
contour=bwtraceboundary(BW,[row,col],'N',connectivity,num_points);
%提取邊界
figure
imshow(I1);
hold on;
plot(contour(:,2),contour(:,1), 'g','LineWidth' ,2);
title('邊界跟蹤圖像');
12.Hough變換
I= imread('xian.bmp');
rotI=rgb2gray(I);
subplot(2,2,1);
imshow(rotI);
title('灰度圖像');
axis([50,250,50,200]);
grid on;
axis on;
BW=edge(rotI,'prewitt');
subplot(2,2,2);
imshow(BW);
title('prewitt運算元邊緣檢測 後圖像');
axis([50,250,50,200]);
grid on;
axis on;
[H,T,R]=hough(BW);
subplot(2,2,3);
imshow(H,[],'XData',T,'YData',R,'InitialMagnification','fit');
title('霍夫變換圖');
xlabel('\theta'),ylabel('\rho');
axis on , axis normal, hold on;
P=houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));
x=T(P(:,2));y=R(P(:,1));
plot(x,y,'s','color','white');
lines=houghlines(BW,T,R,P,'FillGap',5,'MinLength',7);
subplot(2,2,4);,imshow(rotI);
title('霍夫變換圖像檢測');
axis([50,250,50,200]);
grid on;
axis on;
hold on;
max_len=0;
for k=1:length(lines)
xy=[lines(k).point1;lines(k).point2];
plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');
plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');
plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');
len=norm(lines(k).point1-lines(k).point2);
if(len>max_len)
max_len=len;
xy_long=xy;
end
end
plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','cyan');
13.直方圖閾值法
用 MATLAB實現直方圖閾值法:
I=imread('xian.bmp');
I1=rgb2gray(I);
figure;
subplot(2,2,1);
imshow(I1);
title(' 灰度圖像')
axis([50,250,50,200]);
grid on;%顯示網格線
axis on; %顯示坐標系
[m,n]=size(I1);%測量圖像尺寸參數
GP=zeros(1,256); %預創建存放灰度出現概率的向量
for k=0:255
GP(k+1)=length(find(I1==k))/(m*n);%計算每級灰度出現的概率,將其存入GP中相應位置
end
subplot(2,2,2),bar(0:255,GP,'g')%繪制直方圖
title('灰度直方圖')
xlabel('灰度值')
ylabel(' 出現概率')
I2=im2bw(I,150/255);
subplot(2,2,3),imshow(I2);
title('閾值150的分割圖像')
axis([50,250,50,200]);
grid on; %顯示網格線
axis on; %顯示坐標系
I3=im2bw(I,200/255); %
subplot(2,2,4),imshow(I3);
title('閾值200的分割圖像')
axis([50,250,50,200]);
grid on; %顯示網格線
axis on; %顯示坐標系
14. 自動閾值法:Otsu法
用MATLAB實現Otsu演算法:
clc
clear all
I=imread('xian.bmp');
subplot(1,2,1),imshow(I);
title('原始圖像')
axis([50,250,50,200]);
grid on; %顯示網格線
axis on; %顯示坐標系
level=graythresh(I); %確定灰度閾值
BW=im2bw(I,level);
subplot(1,2,2),imshow(BW);
title('Otsu 法閾值分割圖像')
axis([50,250,50,200]);
grid on; %顯示網格線
axis on; %顯示坐標系
15.膨脹操作
I=imread('xian.bmp'); %載入圖像
I1=rgb2gray(I);
subplot(1,2,1);
imshow(I1);
title('灰度圖像')
axis([50,250,50,200]);
grid on; %顯示網格線
axis on; %顯示坐標系
se=strel('disk',1); %生成圓形結構元素
I2=imdilate(I1,se); %用生成的結構元素對圖像進行膨脹
subplot(1,2,2);
imshow(I2);
title(' 膨脹後圖像');
axis([50,250,50,200]);
grid on; %顯示網格線
axis on; %顯示坐標系
16.腐蝕操作
MATLAB 實現腐蝕操作
I=imread('xian.bmp'); %載入圖像
I1=rgb2gray(I);
subplot(1,2,1);
imshow(I1);
title('灰度圖像')
axis([50,250,50,200]);
grid on; %顯示網格線
axis on; %顯示坐標系
se=strel('disk',1); %生成圓形結構元素
I2=imerode(I1,se); %用生成的結構元素對圖像進行腐蝕
subplot(1,2,2);
imshow(I2);
title('腐蝕後圖像');
axis([50,250,50,200]);
grid on; %顯示網格線
axis on; %顯示坐標系
17.開啟和閉合操作
用 MATLAB實現開啟和閉合操作
I=imread('xian.bmp'); %載入圖像
subplot(2,2,1),imshow(I);
title('原始圖像');
axis([50,250,50,200]);
axis on; %顯示坐標系
I1=rgb2gray(I);
subplot(2,2,2),imshow(I1);
title('灰度圖像');
axis([50,250,50,200]);
axis on; %顯示坐標系
se=strel('disk',1); %採用半徑為1的圓作為結構元素
I2=imopen(I1,se); %開啟操作
I3=imclose(I1,se); %閉合操作
subplot(2,2,3),imshow(I2);
title('開啟運算後圖像');
axis([50,250,50,200]);
axis on; %顯示坐標系
subplot(2,2,4),imshow(I3);
title('閉合運算後圖像');
axis([50,250,50,200]);
axis on; %顯示坐標系
18.開啟和閉合組合操作
I=imread('xian.bmp');%載入圖像
subplot(3,2,1),imshow(I);
title('原始圖像');
axis([50,250,50,200]);
axis on;%顯示坐標系
I1=rgb2gray(I);
subplot(3,2,2),imshow(I1);
title('灰度圖像');
axis([50,250,50,200]);
axis on;%顯示坐標系
se=strel('disk',1);
I2=imopen(I1,se);%開啟操作
I3=imclose(I1,se);%閉合操作
subplot(3,2,3),imshow(I2);
title('開啟運算後圖像');
axis([50,250,50,200]);
axis on;%顯示坐標系
subplot(3,2,4),imshow(I3);
title('閉合運算後圖像');
axis([50,250,50,200]);
axis on;%顯示坐標系
se=strel('disk',1);
I4=imopen(I1,se);
I5=imclose(I4,se);
subplot(3,2,5),imshow(I5);%開—閉運算圖像
title('開—閉運算圖像');
axis([50,250,50,200]);
axis on;%顯示坐標系
I6=imclose(I1,se);
I7=imopen(I6,se);
subplot(3,2,6),imshow(I7);%閉—開運算圖像
title('閉—開運算圖像');
axis([50,250,50,200]);
axis on;%顯示坐標系
19.形態學邊界提取
利用 MATLAB實現如下:
I=imread('xian.bmp');%載入圖像
subplot(1,3,1),imshow(I);
title('原始圖像');
axis([50,250,50,200]);
grid on;%顯示網格線
axis on;%顯示坐標系
I1=im2bw(I);
subplot(1,3,2),imshow(I1);
title('二值化圖像');
axis([50,250,50,200]);
grid on;%顯示網格線
axis on;%顯示坐標系
I2=bwperim(I1); %獲取區域的周長
subplot(1,3,3),imshow(I2);
title('邊界周長的二值圖像');
axis([50,250,50,200]);
grid on;
axis on;
20.形態學骨架提取
利用MATLAB實現如下:
I=imread('xian.bmp');
subplot(2,2,1),imshow(I);
title('原始圖像');
axis([50,250,50,200]);
axis on;
I1=im2bw(I);
subplot(2,2,2),imshow(I1);
title('二值圖像');
axis([50,250,50,200]);
axis on;
I2=bwmorph(I1,'skel',1);
subplot(2,2,3),imshow(I2);
title('1次骨架提取');
axis([50,250,50,200]);
axis on;
I3=bwmorph(I1,'skel',2);
subplot(2,2,4),imshow(I3);
title('2次骨架提取');
axis([50,250,50,200]);
axis on;
21.直接提取四個頂點坐標
I = imread('xian.bmp');
I = I(:,:,1);
BW=im2bw(I);
figure
imshow(~BW)
[x,y]=getpts
平滑濾波
h=fspecial('average',9);
I_gray=imfilter(I_gray,h,'replicate');%平滑濾波
F. 免費開源的CRM有哪些
悟空CRM開源版
悟空CRM開源管理軟體在中國的開源管理軟體行業有較高的知名度。目前軟體已達到千萬級的用戶量,開源系統下載量達到200多萬次,已覆蓋設計製造業、服務業、金融業、政府機構等多種行業。與阿里巴巴、騰訊、OPPO、航天信息、CCTV等多家知名企業達成戰略合作。
公司先後獲得河南省高新技術企業、國家3A信用企業、IOS9001、IOS27001軟體產品認證等20多項榮譽獎項。擁有50餘項軟體著作權。 獲得20餘家國內媒體報道。公司自成立以來,以高科技為起點,以技術為核心、 以完善的售後服務為後盾,秉承穩固與發展、求實與創新的精神,已為國內外上萬家企業提供了服務。 在為實現企業價值最大化的過程中, 實現了自身的價值的提升,取得了最大程度的雙贏合作,並獲得了社會各界的廣泛贊譽和認同。
