⑴ 少兒編程都學的什麼
少兒編程是主要是學習可視化圖形編程軟體的使用、簡單的編程知識,以及解決問題的能力。
可視化的圖形編程,就像搭積木一樣學習使用編程軟體,簡單地拖動和拼接積木,就可以創造出很多好玩的游戲、音樂或者美術作品等,用游戲啟蒙的方式激發孩子對編程的熱愛。
簡單的編程邏輯知識,比如條件判斷、順序執行、函數等,提高孩子的邏輯思維能力。
孩子通過編程做項目的過程,需要不斷思考、分析、製作和測試,不同於被動接受理論知識,孩子主動地學習掌握知識,提高解決問題的能力。
⑵ 嵌入式需要學什麼嵌入式需要學哪些課程和內容
所有的電子產品,所用技術都可以認為要麼是單片機,要麼是Linux;GUI方面主要是QT/Android,它們都是運行於Linux之上的。我們說的單片機不使用操作系統,但是使用單片機設備肯定遠遠超過Linux。很多人也是先學習單片機,從單片機進入電子工程師行業,日常生活中,有哪些產品使用單片機、Linux呢?下面舉一些例子:
下面我們用類比和邏輯推導出嵌入式Linux系統的組成,沒錯,「推導」。
從上圖可以知道:
組成:嵌入式Linux系統= bootloader + linux內核 + 根文件系統(裡面含有APP)。
bootloader:它的目的是啟動內核,去哪等讀內核?讀到哪裡?去Flash等外設讀內核,存到內存里去。所以需要有Flash里外設的驅動能力,為了調試方便還會有網路功能。所以,可以認為 booloader = 裸機集合,它就是一個復雜的單片機程序。
Linux內核:Linux內核的最主要目的是去啟動APP,APP保存在哪裡?保存在「根文件系統」里。「根文件系統」又保存在哪裡?在Flash、SD卡等設備里,甚至可能在網路上。所以Linux內核要有這些Flash、SD卡里設備的驅動能力。
不僅如此,Linux內核還有進程調度能力、內存管理等功能。
所以:Linux內核 = 驅動集合 + 進程調度 + 內存管理等。
2.3 要學習bootloader嗎
Bootloader有很多種,常用的叫u-boot。
在實際工作中,對於u-boot基本上是修修改改,甚至不改。但是u-boot本身是很復雜的,比如為了便於調試,它支持網路功能;有些內核是保存在FAT32分區里,於是它要能解析FAT32分區,讀FAT32分區的文件。
花那麼多精力去學習u-boot,但是工作中基本用不到,這對初學者很不友善。
所以,對於初學者,我建議:理解u-boot的作用、會使用u-boot的命令,這就可以了。
如果你的工作就是修改、完善bootloader,那麼再去研究它吧。
2.4 要學習Linux內核、要學習驅動程序嗎
之前我們說過Linux內核 = 驅動集合 + 進程調度 + 內存管理等,如果要學習Linux內核,從驅動程序入手是一個好辦法。
但是人人都要學習Linux內核、人人都要學習Linux驅動嗎?顯然不是。
作為初學者,懂幾個簡單的驅動程序,有利於工作交流;理解中斷、進程、線程的概念,無論是對驅動開發、應用程序開發,都是很有好處的。
所以對於初學者,建議前期只學習這幾個驅動:LED、按鍵、中斷。
LED驅動程序:這是最簡單的驅動程序。
按鍵驅動程序:它也比較簡單,從它引入「中斷」。
中斷:從「中斷」它可以引入:休眠-喚醒、進程/線程、POLL機制、非同步通知等概念。這些概念無論是對驅動開發,還是對應用開發,都很重要。
所以,對於初學者,我建議必須學習這幾個驅動:LED、按鍵、中斷。
入門之後,如果你想從事內核開發、驅動開發,那麼可以去鑽研幾個驅動程序(輸入系統、I2C匯流排、SPI匯流排等),掌握若干個大型驅動程序後,你對內核的套路就有所了解了,再去研究其他部分(比如進程管理、文件系統)時你會發現套路是如此通用。
攝像頭(VL42)、音效卡ALSA驅動是Linux中比較復雜的2類驅動,它們是很難的,如果工作與此相關再去研究。
2.5,要學習Linux應用程序嗎?先學一些基礎技能
要學,即使以後你只想研究內核,一些基本的應用開發編寫能力也是需要的:
基本設備的訪問,比如LCD、輸入設備
進程、線程、進程通信、線程同步與互斥
休眠-喚醒、POLL機制、信號
網路編程
①②③部分的知識,跟驅動有密切的關系,它們是相輔相承的。
掌握了基本驅動開發能力、基本應用開發能力之後,在工作中你就可以跟別人友好溝通了,不至於一臉懵逼。
2.6,應用程序是怎麼啟動的?要了解一下根文件系統
你辛辛苦苦寫出了應用程序,怎麼把它放到板子上,讓它開機就自動啟動?
你寫的程序,它依賴於哪些庫,這些庫放到板子上哪個目錄?
怎麼做一個可升級的系統?即使升級中途斷電了,也要保證程序至少還可以運行老的版本?
這些都需要我們了解一下根文件系統。
先了解一下init進程:它要讀取配置文件,根據配置文件啟動各個APP。
了解了init進程,你就了解了根文件系統的組成,就可以隨心所欲裁剪系統,為你的項目製作出最精簡的系統。
第3章 學習方法
3.1 先不要打破砂鍋問到底
嵌入式涉及的東西太多太雜了,如果心裡沒有主線,碰到什麼都要去研究個透徹,最終反而忘記自己要學什麼了。
嵌入式涉及硬體知識、軟體知識,軟體里涉及匯編、ARM架構、C語言、Makefile、Shell;又分為bootloader、內核、驅動、基本的APP、GUI。
比如我們會用到Makefile,了解它的基本規則,會用我們提供的Makefile就可以。
不需要深入研究那些make函數,因為在工作中都有現成的Makefile給你使用,不需要自己去編寫一套Makefile。何必花上好幾天去深入研究它呢?
比如我們會用到bootloader,難道又要花上幾個月來深入研究u-boot嗎?工作中基本不需要改u-boot,會用那幾個命令就可以。
甚至有些學員先去買本shell的書來學習shell命令,何必?我們在視頻中用到什麼命令,你不懂時再去網路一下這些命令就可以了。
不要脫離初學者的主線:應用基礎、驅動基礎。有了這2個基礎後,你想深入研究某部分時,再去花時間吧。
3.2 思路要清晰,不怕抄代碼
視頻里的代碼,請你一定要自己去寫一次、寫多次。為什麼我現在寫驅動那麼熟?我2009年在華清遠見上課時,
每次上課我都要給學生寫一次那些驅動,十幾次下來閉著眼睛都知道內核的套路了。
記不住那些函數?我也記不住,我都是去參考同類的驅動程序,這又不是閉卷考試。
但是要理清楚思路,你寫這個程序要完成什麼功能、怎麼實現這些功能?這個要弄清楚。
有了思路後再寫代碼,不知道怎麼寫?沒關系,看看視頻,看看示例,然後關閉視頻看看能否自己寫出來。
3.3 對自己的方向很了解,我只能帶你到這里了
我的專長是操作系統,是快速地帶領大家掌握一些項目開發的基礎知識。
如果你決定深入研究某方面時,我並不能帶你多久。你要去看源碼,去看這方面的專業書籍。
比如想深入鑽研內核的內存管理時,它有頁表映射(你需要閱讀ARM架構的手冊)、SLAB分配器、vmalloc/malloc實現、mmap實現、缺頁中斷、父進程子進程之間的頁面管理等等,內容非常多。有時候連書籍都沒有,你需要直接啃代碼。
當你想從事某個行業時,就需要深入研究行業相關的知識。
比如CAN匯流排,它可以寫成一本書:CAN協議、CAN報文、Socket CAN、車身網路拓撲結構,CAN應用報文,CAN網路管理報文,CAN診斷報文。
想做物聯網網關,需要深入研究MQTT,MQTT協議相對簡單,但是MQTT英文原版協議有130多頁,中文版有近100頁,是一本小書了。
每個行業都有自己的業務邏輯,在掌握基本的編程能力之一,你需要結合具體的業務去深入學習。
⑶ 北大青鳥java培訓:伺服器開發架構師
設計師有設計思維,同樣的架構師在開發伺服器和軟體的時候也有自己的架構思維。
今天,電腦培訓http://www.kmbdqn.cn/就一起來了解和學習一下,架構師是如何來培養和提高自己的思維能力的,下面就開始今天的主要內容吧。
架構的本質是管理復雜性,抽象、分層、分治和演化思維是架構師征服復雜性的四種根本性武器。
掌握了抽象、分層、分治和演化這四種基本的武器,你可以設計小到一個類,一個模塊,一個子系統,或者一個中型的系統,也可以大到一個公司的基礎平台架構,微服務架構,技術體系架構,甚至是組織架構,業務架構等等。
架構設計不是靜態的,而是動態演化的。
只有能夠不斷應對環境變化的系統,才是有生命力的系統。
所以即使你掌握了抽象、分層和分治這三種基本思維,仍然需要演化式思維,在設計的同時,藉助反饋和進化的力量推動架構的持續演進。
架構師在關注技術,開發應用的同時,需要定期梳理自己的架構設計思維,積累時間長了,你看待世界事物的方式會發生根本性變化,你會發現我們生活其中的世界,其實也是在抽象、分層、分治和演化的基礎上構建起來的。
另外架構設計思維的形成,會對你的系統架構設計能力產生重大影響。
可以說對抽象、分層、分治和演化掌握的深度和靈活應用的水平,直接決定架構師所能解決問題域的復雜性和規模大小,是區分普通應用型架構師和平台型/系統型架構師的一個分水嶺。
良好的架構設計思維的培養,離不開工作中大量高質量項目的實戰鍛煉,然後是平時的學習、思考和提煉總結。
另外,基本的架構設計思維,其實在我們大學計算機課程(比如數據結構和演算法)中可以找到影子,只不過當時以學習為主,問題域比較小和理想化。
所以大學教育其實非常重要,基本的架構設計思維在那個時候就已經埋下種子,後面工程實踐中進一步消化和應用,隨著經驗的積累,我們能夠解決的問題域復雜性和規模逐漸變大,但基本的武器還是抽象、分層和分治等思維。
⑷ 程序員為什麼是個青春飯而不是像醫生律師一樣越老越值錢
作為一名有近三十年編程經驗的老炮,我想我是有資格回答這個問題的。
程序員確實存在著青春飯的問題,一般說來三十五歲左右,程序員的職業生涯就進入了分水嶺,要麼轉管理崗、要麼做架構師系統分析師、要麼做產品經理,總之繼續編程一般前景都不會太好。為什麼會這樣呢?看一下主流編程語言和框架的更迭周期不難看出端倪。
我們可以看到IT行業每隔10年左右老的技術就會遭到淘汰,新技術就會誕生。您大學時學的編程知識和技巧,到三十五歲時就基本上過時了,您如果繼續編程是競爭不過小鮮肉的,畢竟他們的新知識還熱乎乎的呢。這時候大部分的資深程序員基本上都靠給過去開發的系統做升級改造維持。產品周期短、技術更迭快是導致程序員吃青春飯的主要原因。
那麼程序員如何才能持續發展自己的職業生涯呢?我覺得程序員雖然是腦力勞動,但事實上跟操作工差別不大。因此,抱著寫代碼不放滿腦子都是演算法和邏輯是行不通的,要注意積累行業知識和產品知識,及時轉入上游設計或管理工作,才是長久之計。
最後,說一下程序員是無法跟醫生和律師比較的,就拿醫生來說,至少要學到三十五歲才能出道當上主治大夫。您已經要下場了,人家才登台怎麼比呀?
行業不成熟:我覺得這是主因,硬體(cpu,內存,gpu等),軟體如os,開發語言,日新月異。導致今天還很火的技術過段時間就沒有用武之地。醫療技術雖然更新迭代快,10年前的mfc,delphi已經沒多少人用了,但10年前能治病的技術現在一樣能治。
管理水平落後:國內行業高度內卷,互聯網燒錢,培訓機構鼓吹高薪,大量的人涌進it這一行。但管理水平又跟不上,資本家就通過996這種普通製造業提升產能的手段提升產能。結果就是殺雞取卵,研發的功能未必有用,研發人疲憊不堪又沒時間去思考去創新。到了35歲依舊做著增刪改查,卻比不上25歲的加班能力。
在中國,程序員行業與其他技術密集性行業一樣,老闆急功近利,追求短期利益,只要求初出校園的年輕員工,去簡單的仿造、山寨己有的、淺顯的技術與構思,用年輕人的較強的加班能力,達到產值的最大化!這就是程序員吃青春飯的由來。
殊不知,一個創造性思維的形成,是與許多方面有關的。年輕時期的碼農,到了一定年紀,知識集累到足夠多時,正是量變到質變的最佳時期,可惜,中國的老闆,不需要。所以,青春己過,程序員生涯也己過。
題外話,中國,大的軟體企業,大多集中在大城市的寫字樓。企業經菅成本大,職員生活成本大——主要是房價成本。這就導致絕大多數程序員為生活所追,只能放棄程序開發的高精方面研究、學習丶深造。年齡一到,一無是處,與新畢業學生水平差不多,精力再退化,競爭力自然在下降!換一種說法,似呼,程序員都是吃青春飯!!!
首先,是這兩個行業的特點決定的。醫生律師本身就很看中實踐經驗,臨床經驗豐富的醫生,患者才會充分信任,同樣,經手官司多的律師,才會有更多司法經驗。而程序員所處的IT行業不同,信息技術日新月異,每天都需要學習新的技術,否則很快就會落伍,很少有人敢說自己把java全都搞懂了。[吐血][吐血]
其次,要區分程序員和it工程師,優秀的程序員寫幾年代碼後,可能就不再寫代碼了,轉為架構設計或者產品等等,程序員需要年輕體力好的,可是架構設計師還是需要有豐富的it經驗,對系統有全面的認識和理解,所以程序員的經驗也很寶貴,畢竟沒人想當一輩子碼農[淚奔]
很多人說程序員吃青春飯是因為IT技術變化快,不像醫生們面對的人體結構永遠不變。我想說知識更新慢可以是某些職業越老越吃香的理由,但也可以不是。真正越老越吃香的是老人報團取暖,否則新人一定勝過老人。老師這個職業是有政府的保護,民辦培訓機構老師老了也未必吃香。醫生是有政府和行業協會的各種准入限制,否則按華為研發通訊設備招一批非專業的名校畢業生強化培訓幾個月就上崗的方式來搞的話,醫生供給不要太多。其實你一個牙科醫生把你的牙科搞好就夠用了,大學5年從頭到尾學一遍很多都是浪費。律師這是個跟人干仗的行業,老頭其實是打不過年輕人的,但所有的暴力資源都掌握在老頭們手裡,自古就是如此。
其實任何行業,如果信息充分公開共享,一個新人5年時間足以達到巔峰。之所以有需要10年20年經驗的,那是這個行業里存在等級制度,信息對低級別新人進行封鎖。還有就是一些行業學習機會成本高,需要撞運氣碰到疑難案例來積累經驗,比如醫生,但醫生如果在一些病歷密集的地方,20年經驗完全可以在2年內掌握。未來隨著AI技術發展,AI診斷將超越人類水平。
雖然程序員們可能會覺得這個世界對程序員不公,但大家也不要氣餒,可以坦然面對。IT行業正是以信息開放開源共享的精神,犧牲了老程序員們的傳統建制地位,但確推動了整個行業進而是整個世界的快速前進。如果IT行業也像傳統行業這么玩信息封鎖的話,現有短短幾十年內建立的IT互聯網基礎設施怕是需要3000年甚至3萬年以上。
這個行業知識管理做得很好,新手能快速進入一個行業.
程序員懂醫生或者律師嗎
醫生,律師,以及其它很多職業經驗可以積累十年,二十年,三十年。而編程序的員工,經驗只能保鮮三年,最多四年,因為信息技術發展快,更新換代快!從D0s W32 到W95 W98 再到 Wme xp W7 w8 w10,從pC端到移動端,從BAsic 到PassCaL 到 DeLphi 到 VC#.net2003 到 Vs2005 Vs2007 Vs2010。。。Vs2019,再有sQLserVer2000 2005 2008 2012 到今天2020 ,大家常用的0ffice也從97 98 2000 2003 。。。發展到2020 也就二十年間,跟不上就被淘汰!!!當然程序員工資也得到了比普通工種更高的溢價。
因為沒有知識產權保護,或者說維權成本太高,所以所有互聯網企業都學BAT,賺快錢!!!怎麼賺快錢,就是「抄」,相互抄。一窩蜂的搞外賣,一窩蜂的搞打車,一窩蜂的搞外賣。[靈光一閃][靈光一閃][靈光一閃]前期佔領市場很重要,所以996,所以要年輕的勞動力!!!真不能怪企業,沒歐美那種環境。[機智][機智][機智]
⑸ opencv常用函數
原文鏈接: https://blog.csdn.net/amosllc/java/article/details/88553664
1、cvLoadImage:將圖像文件載入至內存;
2、cvNamedWindow:在屏幕上創建一個窗口;
3、cvShowImage:在一個已創建好的窗口中顯示圖像;
4、cvWaitKey:使程序暫停,等待用戶觸發一個按鍵操作;
5、cvReleaseImage:釋放圖像文件所分配的內存;
6、cvDestroyWindow:銷毀顯示圖像文件的窗口;
7、cvCreateFileCapture:通過參數設置確定要讀入的AVI文件;
8、cvQueryFrame:用來將下一幀視頻文件載入內存;
9、cvReleaseCapture:釋放CvCapture結構開辟的內存空間;
10、cvCreateTrackbar:創建一個滾動條;
11、cvSetCaptureProperty:設置CvCapture對象的各種屬性;
12、cvGetCaptureProperty:查詢CvCapture對象的各種屬性;
13、cvGetSize:當前圖像結構的大小;
14、cvSmooth:對圖像進行平滑處理;
15、cvPyrDown:圖像金字塔,降采樣,圖像縮小為原來四分之一;
16、cvCanny:Canny邊緣檢測;
17、cvCreateCameraCapture:從攝像設備中讀入數據;
18、cvCreateVideoWriter:創建一個寫入設備以便逐幀將視頻流寫入視頻文件;
19、cvWriteFrame:逐幀將視頻流寫入文件;
20、cvReleaseVideoWriter:釋放CvVideoWriter結構開辟的內存空間;
21、CV_MAT_ELEM:從矩陣中得到一個元素;
22、cvAbs:計算數組中所有元素的絕對值;
23、cvAbsDiff:計算兩個數組差值的絕對值;
24、cvAbsDiffS:計算數組和標量差值的絕對值;
25、cvAdd:兩個數組的元素級的加運算;
26、cvAddS:一個數組和一個標量的元素級的相加運算;
27、cvAddWeighted:兩個數組的元素級的加權相加運算(alpha運算);
28、cvAvg:計算數組中所有元素的平均值;
29、cvAvgSdv:計算數組中所有元素的絕對值和標准差;
30、cvCalcCovarMatrix:計算一組n維空間向量的協方差;
31、cvCmp:對兩個數組中的所有元素運用設置的比較操作;
32、cvCmpS:對數組和標量運用設置的比較操作;
33、cvConvertScale:用可選的縮放值轉換數組元素類型;
34、cvCopy:把數組中的值復制到另一個數組中;
35、cvCountNonZero:計算數組中非0值的個數;
36、cvCrossProct:計算兩個三維向量的向量積(叉積);
37、cvCvtColor:將數組的通道從一個顏色空間轉換另外一個顏色空間;
38、cvDet:計算方陣的行列式;
39、cvDiv:用另外一個數組對一個數組進行元素級的除法運算;
40、cvDotProct:計算兩個向量的點積;
41、cvEigenVV:計算方陣的特徵值和特徵向量;
42、cvFlip:圍繞選定軸翻轉;
43、cvGEMM:矩陣乘法;
44、cvGetCol:從一個數組的列中復制元素;
45、cvGetCols:從數據的相鄰的多列中復制元素;
46、cvGetDiag:復制數組中對角線上的所有元素;
47、cvGetDims:返回數組的維數;
48、cvGetDimSize:返回一個數組的所有維的大小;
49、cvGetRow:從一個數組的行中復制元素值;
50、cvGetRows:從一個數組的多個相鄰的行中復制元素值;
51、cvGetSize:得到二維的數組的尺寸,以CvSize返回;
52、cvGetSubRect:從一個數組的子區域復制元素值;
53、cvInRange:檢查一個數組的元素是否在另外兩個數組中的值的范圍內;
54、cvInRangeS:檢查一個數組的元素的值是否在另外兩個標量的范圍內;
55、cvInvert:求矩陣的逆;
56、cvMahalonobis:計算兩個向量間的馬氏距離;
57、cvMax:在兩個數組中進行元素級的取最大值操作;
58、cvMaxS:在一個數組和一個標量中進行元素級的取最大值操作;
59、cvMerge:把幾個單通道圖像合並為一個多通道圖像;
60、cvMin:在兩個數組中進行元素級的取最小值操作;
61、cvMinS:在一個數組和一個標量中進行元素級的取最小值操作;
62、cvMinMaxLoc:尋找數組中的最大最小值;
63、cvMul:計算兩個數組的元素級的乘積(點乘);
64、cvNot:按位對數組中的每一個元素求反;
65、cvNormalize:將數組中元素進行歸一化;
66、cvOr:對兩個數組進行按位或操作;
67、cvOrs:在數組與標量之間進行按位或操作;
68、cvRece:通過給定的操作符將二維數組簡為向量;
69、cvRepeat:以平鋪的方式進行數組復制;
70、cvSet:用給定值初始化數組;
71、cvSetZero:將數組中所有元素初始化為0;
72、cvSetIdentity:將數組中對角線上的元素設為1,其他置0;
73、cvSolve:求出線性方程組的解;
74、cvSplit:將多通道數組分割成多個單通道數組;
75、cvSub:兩個數組元素級的相減;
76、cvSubS:元素級的從數組中減去標量;
77、cvSubRS:元素級的從標量中減去數組;
78、cvSum:對數組中的所有元素求和;
79、cvSVD:二維矩陣的奇異值分解;
80、cvSVBkSb:奇異值回代計算;
81、cvTrace:計算矩陣跡;
82、cvTranspose:矩陣的轉置運算;
83、cvXor:對兩個數組進行按位異或操作;
84、cvXorS:在數組和標量之間進行按位異或操作;
85、cvZero:將所有數組中的元素置為0;
86、cvConvertScaleAbs:計算可選的縮放值的絕對值之後再轉換數組元素的類型;
87、cvNorm:計算數組的絕對范數, 絕對差分范數或者相對差分范數;
88、cvAnd:對兩個數組進行按位與操作;
89、cvAndS:在數組和標量之間進行按位與操作;
90、cvScale:是cvConvertScale的一個宏,可以用來重新調整數組的內容,並且可以將參數從一種數據類型轉換為另一種;
91、cvT:是函數cvTranspose的縮寫;
92、cvLine:畫直線;
93、cvRectangle:畫矩形;
94、cvCircle:畫圓;
95、cvEllipse:畫橢圓;
96、cvEllipseBox:使用外接矩形描述橢圓;
97、cvFillPoly、cvFillConvexPoly、cvPolyLine:畫多邊形;
98、cvPutText:在圖像上輸出一些文本;
99、cvInitFont:採用一組參數配置一些用於屏幕輸出的基本個特定字體;
100、cvSave:矩陣保存;
101、cvLoad:矩陣讀取;
102、cvOpenFileStorage:為讀/寫打開存儲文件;
103、cvReleaseFileStorage:釋放存儲的數據;
104、cvStartWriteStruct:開始寫入新的數據結構;
105、cvEndWriteStruct:結束寫入數據結構;
106、cvWriteInt:寫入整數型;
107、cvWriteReal:寫入浮點型;
108、cvWriteString:寫入字元型;
109、cvWriteComment:寫一個XML或YAML的注釋字串;
110、cvWrite:寫一個對象;
111、cvWriteRawData:寫入多個數值;
112、cvWriteFileNode:將文件節點寫入另一個文件存儲器;
113、cvGetRootFileNode:獲取存儲器最頂層的節點;
114、cvGetFileNodeByName:在映圖或存儲器中找到相應節點;
115、cvGetHashedKey:為名稱返回一個惟一的指針;
116、cvGetFileNode:在映圖或文件存儲器中找到節點;
117、cvGetFileNodeName:返迴文件的節點名;
118、cvReadInt:讀取一個無名稱的整數型;
119、cvReadIntByName:讀取一個有名稱的整數型;
120、cvReadReal:讀取一個無名稱的浮點型;
121、cvReadRealByName:讀取一個有名稱的浮點型;
122、cvReadString:從文件節點中尋找字元串;
123、cvReadStringByName:找到一個有名稱的文件節點並返回它;
124、cvRead:將對象解碼並返回它的指針;
125、cvReadByName:找到對象並解碼;
126、cvReadRawData:讀取多個數值;
127、cvStartReadRawData:初始化文件節點序列的讀取;
128、cvReadRawDataSlice:讀取文件節點的內容;
129、cvGetMoleInfo:檢查IPP庫是否已經正常安裝並且檢驗運行是否正常;
130、cvResizeWindow:用來調整窗口的大小;
131、cvSaveImage:保存圖像;
132、cvMoveWindow:將窗口移動到其左上角為x,y的位置;
133、cvDestroyAllWindow:用來關閉所有窗口並釋放窗口相關的內存空間;
134、cvGetTrackbarPos:讀取滑動條的值;
135、cvSetTrackbarPos:設置滑動條的值;
136、cvGrabFrame:用於快速將視頻幀讀入內存;
137、cvRetrieveFrame:對讀入幀做所有必須的處理;
138、cvConvertImage:用於在常用的不同圖像格式之間轉換;
139、cvErode:形態腐蝕;
140、cvDilate:形態學膨脹;
141、cvMorphologyEx:更通用的形態學函數;
142、cvFloodFill:漫水填充演算法,用來進一步控制哪些區域將被填充顏色;
143、cvResize:放大或縮小圖像;
144、cvPyrUp:圖像金字塔,將現有的圖像在每個維度上都放大兩倍;
145、cvPyrSegmentation:利用金字塔實現圖像分割;
146、cvThreshold:圖像閾值化;
147、cvAcc:可以將8位整數類型圖像累加為浮點圖像;
148、cvAdaptiveThreshold:圖像自適應閾值;
149、cvFilter2D:圖像卷積;
150、cvCopyMakeBorder:將特定的圖像輕微變大,然後以各種方式自動填充圖像邊界;
151、cvSobel:圖像邊緣檢測,Sobel運算元;
152、cvLaplace:拉普拉斯變換、圖像邊緣檢測;
153、cvHoughLines2:霍夫直線變換;
154、cvHoughCircles:霍夫圓變換;
155、cvRemap:圖像重映射,校正標定圖像,圖像插值;
156、cvWarpAffine:稠密仿射變換;
157、cvGetQuadrangleSubPix:仿射變換;
158、cvGetAffineTransform:仿射映射矩陣的計算;
159、cvCloneImage:將整個IplImage結構復制到新的IplImage中;
160、cv2DRotationMatrix:仿射映射矩陣的計算;
161、cvTransform:稀疏仿射變換;
162、cvWarpPerspective:密集透視變換(單應性);
163、cvGetPerspectiveTransform:計算透視映射矩陣;
164、cvPerspectiveTransform:稀疏透視變換;
165、cvCartToPolar:將數值從笛卡爾空間到極坐標(極性空間)進行映射;
166、cvPolarToCart:將數值從極性空間到笛卡爾空間進行映射;
167、cvLogPolar:對數極坐標變換;
168、cvDFT:離散傅里葉變換;
169、cvMulSpectrums:頻譜乘法;
170、cvDCT:離散餘弦變換;
171、cvIntegral:計算積分圖像;
172、cvDistTransform:圖像的距離變換;
173、cvEqualizeHist:直方圖均衡化;
174、cvCreateHist:創建一新直方圖;
175、cvMakeHistHeaderForArray:根據已給出的數據創建直方圖;
176、cvNormalizeHist:歸一化直方圖;
177、cvThreshHist:直方圖閾值函數;
178、cvCalcHist:從圖像中自動計算直方圖;
179、cvCompareHist:用於對比兩個直方圖的相似度;
180、cvCalcEMD2:陸地移動距離(EMD)演算法;
181、cvCalcBackProject:反向投影;
182、cvCalcBackProjectPatch:圖塊的方向投影;
183、cvMatchTemplate:模板匹配;
184、cvCreateMemStorage:用於創建一個內存存儲器;
185、cvCreateSeq:創建序列;
186、cvSeqInvert:將序列進行逆序操作;
187、cvCvtSeqToArray:復制序列的全部或部分到一個連續內存數組中;
188、cvFindContours:從二值圖像中尋找輪廓;
189、cvDrawContours:繪制輪廓;
190、cvApproxPoly:使用多邊形逼近一個輪廓;
191、cvContourPerimeter:輪廓長度;
192、cvContoursMoments:計算輪廓矩;
193、cvMoments:計算Hu不變矩;
194、cvMatchShapes:使用矩進行匹配;
195、cvInitLineIterator:對任意直線上的像素進行采樣;
196、cvSampleLine:對直線采樣;
197、cvAbsDiff:幀差;
198、cvWatershed:分水嶺演算法;
199、cvInpaint:修補圖像;
200、cvGoodFeaturesToTrack:尋找角點;
201、cvFindCornerSubPix:用於發現亞像素精度的角點位置;
202、cvCalcOpticalFlowLK:實現非金字塔的Lucas-Kanade稠密光流演算法;
203、cvMeanShift:mean-shift跟蹤演算法;
204、cvCamShift:camshift跟蹤演算法;
205、cvCreateKalman:創建Kalman濾波器;
206、cvCreateConDensation:創建condensation濾波器;
207、cvConvertPointsHomogenious:對齊次坐標進行轉換;
208、cvFindChessboardCorners:定位棋盤角點;
209、cvFindHomography:計算單應性矩陣;
210、cvRodrigues2:羅德里格斯變換;
211、cvFitLine:直線擬合演算法;
212、cvCalcCovarMatrix:計算協方差矩陣;
213、cvInvert:計算協方差矩陣的逆矩陣;
214、cvMahalanobis:計算Mahalanobis距離;
215、cvKMeans2:K均值;
216、cvCloneMat:根據一個已有的矩陣創建一個新矩陣;
217、cvPreCornerDetect:計算用於角點檢測的特徵圖;
218、cvGetImage:CvMat圖像數據格式轉換成IplImage圖像數據格式;
219、cvMatMul:兩矩陣相乘;
⑹ 如何從入門開始學習OpenCV
方法如下:
先去下載最新版OpenCV,網址如下:http://nchc.dl.sourceforge.net/project/opencvlibrary/opencv-win/2.4.3/OpenCV-2.4.3.exe。下載完成後解壓到相應目錄。本人解壓到D:Program FilesOpenCV2.4.3。
有的文章提到使用CMake把OpenCV下面的範例生成為Visual Studio的工程,此處我沒有這樣做。直接使用範例。這里先把OpenCV目錄下面的幾個重要目錄做個說明:
doc目錄:主要包含OpenCV的幫助文檔。其中opencv2refman.pdf主要是OpenCV的各種類和函數的使用說明。
opencv_tutorials.pdf,主要是下面教學代碼目錄裡面各個教學範例的簡單講解。
opencv_cheatsheet.pdf主要是最常用OpenCV類和函數的集合。此3個PDF文檔對自學者幫助最大。
samplescpp utorial_code目錄:裡麵包含基本教學代碼。和上面的opencv_tutorials.pdf文檔遙相呼應,構成一個完整的自學體系。
build目錄:包含編譯,調試,發布所需要的各類動態庫,靜態庫,頭文件等。因為OpenCV2.4.3好像只支持Visual Studio 2008以上版本,我在這里以Visual Studio 2008為例講解如何讓範例跑起來。
添加環境變數:此處我在path環境變數中添加如下目錄:D:Program FilesOpenCV2.4.3uildx86vc9in。記住在前面一個目錄後面加分號。
在Visual Studio中包含頭文件目錄:見附件中的圖片,已經用紅色矩形框標識如何操作。
在Visual Studio中包含庫文件目錄:見附件中的圖片,已經用紅色矩形框標識如何操作。4
建立一個新建Visual Studio VC win32控制台應用工程,這里我選擇帶預編譯頭的工程,省去添加cpp文件的工作。
代碼創建:這里我選擇samplescpp utorial_codeImgProcMorphology_2.cpp文件。先添加包含目錄,如下(以後所有範例均可以如下添加):#include <opencv2/opencv.hpp>#include <stdio.h>然後復制代碼。
編譯文件:自然少不了要包含靜態庫,要添加的庫(debug版和release差別就是文件名後多了一個d標識是debug版)如下:
debug版:
opencv_calib3d243d.lib
opencv_contrib243d.lib
opencv_core243d.lib
opencv_features2d243d.lib
opencv_flann243d.lib
opencv_gpu243d.lib
opencv_haartraining_engined.lib
ibrelease版:
opencv_calib3d243.lib
opencv_contrib243.lib
opencv_core243.lib
opencv_features2d243.lib
opencv_flann243.lib
opencv_gpu243.lib
字元集設置:如果編譯過程中出現如下錯誤:不能將參數 1 從「_TCHAR *」轉換為「const std::string &」原因如下: 無法從「_TCHAR *」轉換為「const std::string」。請字元集設置為「使用多位元組字元集」。
最後指定命令後參數:方法見附件。這樣就可以不用在windows命令行下輸入參數了,方便調試,但是要注意,圖片必須放在你所建立的工程目錄下(和.cpp以及.h文件同一目錄)。否則就要加上相應的路徑。如果參數多於1個,請以空格分開。
支持所有參數設置完成,開始編譯運行吧。如果Visual Studio無問題的話,按照以上按部就班操作,每個範例均可以正常運行。