計(jì)算機(jī)考研面試題目_第1頁
計(jì)算機(jī)考研面試題目_第2頁
計(jì)算機(jī)考研面試題目_第3頁
計(jì)算機(jī)考研面試題目_第4頁
計(jì)算機(jī)考研面試題目_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

8086/8088的內(nèi)部中斷主要有5種。

(1)除法錯(cuò)中斷

(2)單步中斷

(3)斷點(diǎn)中斷

(4)溢出中斷

(5)用戶自定義的軟件中斷

在8086/8088內(nèi)存的開始1K字節(jié)建立了一個(gè)中斷向量表,每個(gè)中斷向量由4個(gè)字節(jié)組

成,低兩位是IP值,高兩位是CS值,這個(gè)CS:IP地址表示當(dāng)相應(yīng)中斷發(fā)生時(shí),中斷

處理程序的入口地址。

關(guān)閉中斷標(biāo)識(shí),重要數(shù)據(jù)入棧,處理中斷服務(wù)功能(你要實(shí)現(xiàn)的功能),數(shù)據(jù)出棧,恢復(fù)中

斷標(biāo)識(shí),開中斷.

ExtJS

不同其他的JavaScript庫,ExtJS為您的開發(fā)夯實(shí)了基礎(chǔ),只

需幾行代碼,你就可以制作出豐富的用戶界面。

Ext庫是對(duì)雅虎YUI的一個(gè)拓展,提供了它所不支持的特性:良好的APL真實(shí)的控

件。雖然YUI致力于用戶界面,但是它卻沒有提供許多有用的功能。?

Ext的產(chǎn)生源自于開發(fā)者、開源貢獻(xiàn)者們將YUI擴(kuò)展成一個(gè)強(qiáng)大的客戶端應(yīng)用程序庫

的努力。?

Ext提供了一個(gè)簡(jiǎn)單豐富的用戶界面,如同桌面程序一般。這使得開發(fā)者能夠

把精力更多的轉(zhuǎn)移到實(shí)現(xiàn)應(yīng)用的功能上。Ext官網(wǎng)上的示例會(huì)讓你知道它是如何的不

可思議:

Ext讓通過如下的方式來讓web應(yīng)用的開發(fā)變的十分簡(jiǎn)單:?

??提供簡(jiǎn)單的,跨瀏覽器的控件,如:窗口、表格、表單。這些組件都是能夠適應(yīng)

市場(chǎng)上的主流瀏覽器的。我們不需要做任何改動(dòng)。?

??用戶是通過EventManager來和瀏覽器做交互的,相應(yīng)的事件有:用戶的鍵盤輸

入,鼠標(biāo)擊打,瀏覽器監(jiān)聽(窗口改變大小,改變字休)等等;?

??在和用戶交互時(shí)不需要刷新頁面,一切在后臺(tái)進(jìn)行。它允許你從服務(wù)器通過AJAX

來獲取或者提交數(shù)據(jù)并且在第一時(shí)間執(zhí)行你的反饋。

JavaEE

MVC:開始是存在于桌面程序中的,M是指業(yè)務(wù)模型,V是指用戶界面,C則是控制

器,使用MVC的目的是將M和V的實(shí)現(xiàn)代碼分離,從而使同一個(gè)程序可以使用不同的

表現(xiàn)形式。比如一批統(tǒng)計(jì)數(shù)據(jù)可以分別用柱狀圖、餅圖來表示。C存在的目的則是確保

M和V的同步,一旦M改變,V應(yīng)該同步更新。[1-2]

Hibernate是一個(gè)實(shí)現(xiàn)數(shù)據(jù)持久化的工具項(xiàng)目,它可以被嵌入到J2EE服務(wù)器中使

用,也可以直接從客戶端調(diào)用,通常的使用方式是將Hibernate嵌入到Tomcat和JBoss

等服務(wù)器中使用。

簡(jiǎn)單的說就是在表的記錄與與表對(duì)應(yīng)的持久化類的實(shí)例之間進(jìn)行轉(zhuǎn)換。

Spring:Spring表示是一個(gè)開源框架,是為了解決企業(yè)應(yīng)用程序開發(fā)復(fù)雜性??蚣艿?/p>

主要優(yōu)勢(shì)之一就是其分層架構(gòu),分層架構(gòu)允許使用者選擇使用哪一個(gè)組件,同時(shí)為J2EE

應(yīng)用程序開發(fā)提供集成的框架。Spring使用基本的JavaBean來完成以前只可能由EJB

完成的事情。然而,Spring的用途不僅限于服務(wù)器端的開發(fā)。從簡(jiǎn)單性、可測(cè)試性和松

耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。

?目的:解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性

?功能:使用基本的JavaBean代替EJB,并提供了更多的企業(yè)應(yīng)用功能

?范圍:任何Java應(yīng)用

簡(jiǎn)單來說,Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(loC)和面向切面(AOP)的容器框架。

?輕量一一從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在

一個(gè)大小只有1MB多的JAR文件里發(fā)布。并且Spring所需的處理開銷也是微不足道的。

此外,Spring是非侵入式的:典型地,Spring應(yīng)用中的對(duì)象不依賴于Spring的特定類。

?控制反轉(zhuǎn)一一Spring通過一種稱作控制反轉(zhuǎn)(loC)的技術(shù)促進(jìn)了松耦合。當(dāng)應(yīng)用

了loC,一個(gè)對(duì)象依賴的其它對(duì)象會(huì)通過被動(dòng)的方式傳遞進(jìn)來,而不是這個(gè)對(duì)象自己創(chuàng)

建或者查找依賴對(duì)象。你可以認(rèn)為loC與JNDI相反一一不是對(duì)象從容器中查找依賴,

而是容器在對(duì)象初始化時(shí)不等對(duì)象請(qǐng)求就主動(dòng)將依賴傳遞給它。

?面向切面一一Spring提供了面向切面編程的豐富支持,允許通過分離應(yīng)用的'業(yè)務(wù)

邏輯與系統(tǒng)級(jí)服務(wù)(例如審計(jì)〔auditing)和事務(wù)(transaction)管理)進(jìn)行內(nèi)聚性的開

發(fā)。應(yīng)用對(duì)象只實(shí)現(xiàn)它們應(yīng)該做的一一完成業(yè)務(wù)邏輯一一僅此而已。它們并不負(fù)責(zé)(甚

至是意識(shí))其它的系統(tǒng)級(jí)關(guān)注點(diǎn),例如日志或事務(wù)支持。

?容器一一Spring包含并管理應(yīng)用對(duì)象的配置和生命周期,在這個(gè)意義上它是一種

容器,你可以配置你的每個(gè)bean如何被創(chuàng)建一一基于一個(gè)可配置原型(prototype),你

的bean可以創(chuàng)建一個(gè)單獨(dú)的實(shí)例或者每次需要時(shí)都生成一個(gè)新的實(shí)例一一以及它們是

如何相互關(guān)聯(lián)的。然而,Spring不應(yīng)該被混同于傳統(tǒng)的重量級(jí)的EJB容器,它們經(jīng)常是

龐大與笨重的,難以使用。

?框架一一Spring可以將簡(jiǎn)單的組件配置、組合成為復(fù)雜的應(yīng)用。在Spring中,應(yīng)

用對(duì)象被聲明式地組合,典型地是在一個(gè)XML文件里。Spring也提供了很多基礎(chǔ)功能(事

務(wù)管理、持久化框架集成等等),將應(yīng)用邏輯的開發(fā)留給了你。

?MVC——Spring的作用是整合,但不僅僅限于整合,Spring框架可以被看做是一

個(gè)企業(yè)解決方案級(jí)別的框

架。客戶端發(fā)送請(qǐng)求,服務(wù)器控制器(由DispatcherServlet實(shí)現(xiàn)的)完成請(qǐng)求的轉(zhuǎn)發(fā),

控制器調(diào)用一個(gè)用于映射的類HandlerMapping,該類用于將請(qǐng)求映射到對(duì)應(yīng)的處理器來

處理請(qǐng)求。HandlerMapping將請(qǐng)求映射到對(duì)應(yīng)的處理器Controller(相當(dāng)于Action)在

Spring當(dāng)中如果寫一些處理器組件,一般實(shí)現(xiàn)Controller接口,在Controller中就可以

調(diào)用一些Service或DAO來進(jìn)行數(shù)據(jù)操作ModelAndView用于存放從DAO中取出的

數(shù)據(jù),還可以存放響應(yīng)視圖的一些數(shù)據(jù)。如果想將處理結(jié)果返回給用戶,那么在Spring

框架中還提供一個(gè)視圖組件ViewResolver,該組件根據(jù)Controller返回的標(biāo)示,找到對(duì)

應(yīng)的視圖,將響應(yīng)response返回給用戶。

所有Spring的這些特征使你能夠編寫更干凈、更可管理、并且更易于測(cè)試的代碼。

它們也為Spring中的各種模塊提供了基礎(chǔ)支持“

JAVAEE:是一套全然不同于傳統(tǒng)應(yīng)用開發(fā)的技術(shù)架構(gòu),包含許多組件,主要可簡(jiǎn)化

旦規(guī)范應(yīng)用系統(tǒng)的開發(fā)與部署,進(jìn)而提高可移植性、安全與再用價(jià)值。核心是一組技術(shù)規(guī)

范與指南,其中所包含的各類組件、服務(wù)架構(gòu)及技術(shù)層次,均有共同的標(biāo)準(zhǔn)及規(guī)格,讓各種依循架構(gòu)

的不同平臺(tái)之間,存在良好兼容性,解決過去企業(yè)后端使用的信息產(chǎn)品彼此之間無法兼容,企業(yè)內(nèi)部

或外部難以互通的窘境。

Struts:struts是開源軟件。使用Struts的目的是為:幫助我們減少在運(yùn)用MVC

設(shè)計(jì)模型來開發(fā)Web應(yīng)用的時(shí)間。如果我們想混合使用Servlets和JSP的優(yōu)點(diǎn)來建立

可擴(kuò)展的應(yīng)用,struts是一個(gè)不錯(cuò)的選擇。它采用MVC模式,能夠很好地幫助java開發(fā)

者利用J2EE開發(fā)Web應(yīng)用。和其他的java架構(gòu)一樣,Struts也是面向?qū)ο笤O(shè)計(jì),將MVC

模式〃分離顯示邏輯和業(yè)務(wù)邏輯〃的能力發(fā)揮得淋漓盡致。Structs框架的核心是一個(gè)彈

性的控制層,基于如JavaServlets,JavaBeans,Resource3undl.es與XML等標(biāo)準(zhǔn)技術(shù),

以及JakartaCommons的一些類庫。

JSON:JSON(JavaScriptObjectNotation)是一種輕量級(jí)的數(shù)據(jù)交換格式。它基

1.C的結(jié)構(gòu)體和C++結(jié)構(gòu)體的區(qū)別

1.1C的結(jié)構(gòu)體內(nèi)不允許有函數(shù)存在,C++允許有內(nèi)部成員函數(shù),且允許該函數(shù)是虛函數(shù)。所

以C的結(jié)構(gòu)體是沒有構(gòu)造函數(shù)、析構(gòu)函數(shù)、和this指針的。

1.2C的結(jié)構(gòu)體對(duì)內(nèi)部成員變量的訪問權(quán)限只能是public,而C++允許

public,protected,private三種。

L3C語言的結(jié)構(gòu)體是不可以繼承的,C++的結(jié)構(gòu)體是可以從其他的結(jié)構(gòu)體或者類繼承過來的。

以上都是表面的區(qū)別,實(shí)際區(qū)別就是面向過程和面向?qū)ο缶幊趟悸返膮^(qū)另不

C的結(jié)構(gòu)體只是把數(shù)據(jù)變量給包裹起來了,并不涉及算法。

而C++是把數(shù)據(jù)變量及對(duì)這些數(shù)據(jù)變量的相關(guān)算法給封裝起來,并且給對(duì)這些數(shù)據(jù)和類不

同的訪問權(quán)限。

C語言中是沒有類的概念的,但是C語言可以通過結(jié)構(gòu)體內(nèi)創(chuàng)建函數(shù)指針實(shí)現(xiàn)面向?qū)ο笏枷搿?/p>

2.C++的結(jié)構(gòu)體和C++類的區(qū)別

2.1C++結(jié)構(gòu)體內(nèi)部成員變量及成員函數(shù)默認(rèn)的訪問級(jí)別是public,而C++類的內(nèi)部成員變量

及成員函數(shù)的默認(rèn)訪問級(jí)別是private。

2.2C++結(jié)構(gòu)體的繼承默認(rèn)是public,而C++類的繼承默認(rèn)是privateo

靜態(tài)鏈接庫、動(dòng)態(tài)鏈接庫與COM組件的區(qū)別

i.動(dòng)態(tài)鏈接庫與靜態(tài)鏈接庫的區(qū)別。

i.i靜態(tài)鏈接庫作為代碼的?部分,在編譯時(shí)被鏈接。

1.2動(dòng)態(tài)鏈接庫有兩種使用方式:

一種是靜態(tài)加載,跳在應(yīng)用程序啟動(dòng)時(shí)被加載:

?種是動(dòng)態(tài)加載,即是該動(dòng)態(tài)鏈接庫在被使用時(shí)才被應(yīng)用程序加載。

2.動(dòng)態(tài)鏈接庫和C0U組件的區(qū)別

2.1動(dòng)態(tài)鏈接庫的表現(xiàn)形式只能是dll[變態(tài)該名的除外],COM組件的表現(xiàn)形式可以是dll

也可以是exe。

注:其實(shí)字體、驅(qū)動(dòng)等也算是動(dòng)態(tài)鏈接庫的一種,這里略去.??

2.2動(dòng)態(tài)鏈接庫的生成和編譯器及系統(tǒng)相關(guān),在Windows/Linux下系統(tǒng),需要分別編譯才

能使用。

COM組件是二進(jìn)制編碼,在Windows和Linux下可以直接使用,不需要重新編譯。

2.3COM組件是按照COM規(guī)范實(shí)現(xiàn)的dll或者exe;動(dòng)態(tài)鏈接庫是一個(gè)可以導(dǎo)出函數(shù)的函數(shù)

集合。

2.4動(dòng)態(tài)鏈接庫只能在本機(jī)被調(diào)用,COM組件支持分布式使用。

MAC地址是不能通過IP來查詢的!

局域網(wǎng)如何根據(jù)ip查mac

cmd

pingip地址

arp-a

即使ping不通,只要他機(jī)開著,都可以看到MAC!!

顯示和修改“地址解析協(xié)議(ARP)”緩存中的項(xiàng)目。ARP緩存和包含一個(gè)或多個(gè)表,它們用

于存儲(chǔ)IP地址及其經(jīng)過解析的以太網(wǎng)或令牌環(huán)物理地址。計(jì)算機(jī)上安裝的每一個(gè)以太網(wǎng)或令牌

環(huán)網(wǎng)絡(luò)適配器都有自己?jiǎn)为?dú)的表。如果在沒有參數(shù)的情況下使用,則arp命令將顯示幫助信息。

-a[InetAddr][-NIfaceAddr]

顯示所有接口的當(dāng)前ARP緩存表,要顯示特定IP地址的ARP緩存項(xiàng),請(qǐng)使用帶有IiieUddi

參數(shù)的arp-a,此處的InetAddr代表IP地址。如果未指定InetAddr,則使用第一個(gè)適用的

接口。要顯示特定接口的ARP緩存表,請(qǐng)將-NIfaceAddr參數(shù)與-a參數(shù)一起使用,此處的

IfaceAddr代表指派給該接口的IP地址。-N參數(shù)區(qū)分大小寫。

BIOS

BIOS設(shè)置程序是儲(chǔ)存在BTOS芯片中的,BIOS芯片是主板上一塊長(zhǎng)方形或正方形芯片,只有

在開機(jī)時(shí)才可以進(jìn)行設(shè)置。

BIOS是:直譯過來后中文名稱就是“基本輸入輸出系統(tǒng)”。其實(shí),它是?組固化到計(jì)算機(jī)內(nèi)主

板上一個(gè)ROM芯片上的程序,它保存著計(jì)算機(jī)最重要的基本輸入輸出的程序、系統(tǒng)設(shè)置信息、a

機(jī)后自檢程序和系統(tǒng)自啟動(dòng)程序。其主要功能是為計(jì)算機(jī)提供最底層的、最直接的硬件設(shè)置和

控制。

數(shù)學(xué)中的梯度是什么意思?

在向量微積分中,標(biāo)量場(chǎng)的梯度是一個(gè)向量場(chǎng)。標(biāo)量場(chǎng)中某一點(diǎn)上的梯度指向標(biāo)量場(chǎng)增長(zhǎng)最

快的方向,梯度的長(zhǎng)度是這個(gè)最大的變化率。更嚴(yán)格的說,從歐氐空間Rn到R的函數(shù)的梯度是

在Rn某一點(diǎn)最佳的線性近似。在這個(gè)意義上,梯度是雅戈比矩陣的一個(gè)特殊情況。

在單變量的實(shí)值函數(shù)的情況,梯度只是導(dǎo)數(shù),或者,對(duì)于一個(gè)線性函數(shù),也就是線的斜率。

梯度一詞有時(shí)用于斜度,也就是一個(gè)曲面沿著給定方向的傾斜程度。可以通過取向量梯度和

所研究的方向的點(diǎn)積來得到斜度。梯度的數(shù)值有時(shí)也被成為梯度。

如果你是問在純數(shù)學(xué)中的作用,那就是反映那個(gè)量變化的有多劇烈;多元微積分中則還反映在哪

個(gè)方向上變化最劇烈.

云計(jì)算

云計(jì)算111是基于互聯(lián)網(wǎng)的相關(guān)服務(wù)的增加、使用和交付模式,通常涉及通過互聯(lián)網(wǎng)

來提供動(dòng)態(tài)易擴(kuò)展且經(jīng)常是虛擬化的資源。定義:“云計(jì)算是通過網(wǎng)絡(luò)提供可伸縮的廉

價(jià)的分布式計(jì)算能力”。

云計(jì)算代表了以虛擬化技術(shù)為核心、以低成木為目標(biāo)的動(dòng)態(tài)可擴(kuò)展網(wǎng)絡(luò)應(yīng)用基礎(chǔ)設(shè)

施,是近年來最有代表性的網(wǎng)絡(luò)計(jì)算技術(shù)與模式。

云計(jì)算是:分布式計(jì)算、并行計(jì)算、效用計(jì)算、[3]網(wǎng)絡(luò)存儲(chǔ)、虛擬化、負(fù)載均衡等

傳統(tǒng)計(jì)算機(jī)和網(wǎng)絡(luò)技術(shù)發(fā)展融合的產(chǎn)物。

右計(jì)算是遇過使計(jì)算分布在大量的分布式計(jì)算機(jī)上,而非本地計(jì)算機(jī)或遠(yuǎn)程服務(wù)器

中,企業(yè)數(shù)據(jù)中心的運(yùn)行將與互聯(lián)網(wǎng)更相似。這使得企業(yè)能夠?qū)①Y源切換到需要的應(yīng)用

上,根據(jù)需求訪問計(jì)算機(jī)和存儲(chǔ)系統(tǒng)。

好比是從古老的單臺(tái)發(fā)電機(jī)模式轉(zhuǎn)向了電廠集中供電的模式。它意味著計(jì)算能力也可

以作為一種商品進(jìn)行流通,就像煤氣、水電一樣,取用方便,費(fèi)用低廉。最大的不同在

于,它是通過互聯(lián)網(wǎng)進(jìn)行傳輸?shù)摹?/p>

網(wǎng)格計(jì)算:分布式計(jì)算的一種,由一群松散耦合的計(jì)算機(jī)組成的一個(gè)超級(jí)虛擬計(jì)算機(jī),常用來執(zhí)

行一些大型任務(wù);

效用計(jì)算:IT資源的一種打包和計(jì)費(fèi)方式,比如按照計(jì)算、存儲(chǔ)分別計(jì)量費(fèi)用,像傳統(tǒng)的電力等

公共設(shè)施一樣;

算法的時(shí)間復(fù)雜度

一個(gè)算法花費(fèi)的時(shí)間與算法中語句的執(zhí)行次數(shù)或正比例U一個(gè)算法中的語句執(zhí)行次數(shù)

稱為語句頻度或時(shí)間頻度。記為T(n)。

計(jì)算方法

1.般情況下,算法的基本操作重史執(zhí)行的次數(shù)是模塊n的某個(gè)函數(shù)f(n),因此,算法的時(shí)間

復(fù)雜度記做:T(n)=O(f(n))

分析:隨著模塊n的增大,算法執(zhí)行的時(shí)間的增長(zhǎng)率和f(n)的增長(zhǎng)率成正比,所以f(n)越小,

算法的時(shí)間復(fù)雜度越低,算法的效率越高;

2.在計(jì)算時(shí)間復(fù)雜度的時(shí)候,先找出算法的基本操作,然后根據(jù)相應(yīng)的各語句確定它的執(zhí)行次數(shù),

再找出T(n)的同數(shù)量級(jí)(它的同數(shù)曷級(jí)有以下:1,log(2)n,n,nlog(2)n,n的平方,n的三次方,

2的n次方,n!),找出后,f(n)=該數(shù)量級(jí),若T(n)/f(n)求極限可得到一常數(shù)c,則時(shí)間復(fù)雜度T(n)

=O(f(n))

十種程序設(shè)計(jì)語言

PASCAL,C、Ada

FORTRAN、BASIC、VisualBasicJava、C++、Go、Delphi、F#

SQL,PowerBuilder,

static全局變量與普通的全局變量有什么區(qū)別?

全局變量(外部變量)的說明之前再冠以static就構(gòu)成了靜態(tài)的全局變量。全局變

量本身就是靜態(tài)存儲(chǔ)方式,靜態(tài)全局變量當(dāng)然也是靜態(tài)存儲(chǔ)方式。這兩者在存儲(chǔ)方式

上并無不同。這兩者的區(qū)別雖在于非靜態(tài)全局變量的作用域是整個(gè)源程序,當(dāng)一個(gè)源程

序由多個(gè)源文件組成時(shí),非靜態(tài)的全局變量在各個(gè)源文件中都是有效的。

而靜態(tài)全局變量則限制了其作用域,即只在定義該變量的源文件內(nèi)有效,在

同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個(gè)源文件

內(nèi),只能為該源文件內(nèi)的函數(shù)公用,因此可以避免在其它源文件中引起錯(cuò)誤。

從以上分析可以看出,把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲(chǔ)方式即改變

了它的生存期。把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域,限制了它的使用范

圍。

static函數(shù)與普通函數(shù)作用域不同。僅在本文件。只在當(dāng)前源文件中使用的函數(shù)應(yīng)該

說明為內(nèi)部函數(shù)(static),內(nèi)部函數(shù)應(yīng)該在當(dāng)前源文件中說明和定義。對(duì)于可在當(dāng)前源文

件以外使用的函數(shù),應(yīng)該在一個(gè)頭文件中說明,要使用這些函數(shù)的源文件要包含這個(gè)頭

文件

static全局變量與普通的全局變量有什么區(qū)別:static全局變量只初使化一次,防止

在其他文件單元中被引用;

static局部變量和普通局部變量有什么區(qū)別:static局部變量只被初始化一次,下一

次依據(jù)上一次結(jié)果值;

static函數(shù)與普通函數(shù)有什么區(qū)別:static函數(shù)在內(nèi)存中只有一份,普通函數(shù)在每個(gè)

被調(diào)用中維持一份拷貝

C語言中講講static變量和static函數(shù)有什么作用

static關(guān)鍵字有兩種意思,你看上下文來判斷

1,表示變量是靜態(tài)存儲(chǔ)變量

表示變量存放在靜態(tài)存儲(chǔ)區(qū).

2,表示該變量是內(nèi)部連接

(這種情況是指該變量不在任何{}之內(nèi),就象全局變量那樣,這時(shí)候加上static)

,也就是說在其它的.cpp文件中,該變量是不可見的(你不能用).

當(dāng)static加在函數(shù)前面的時(shí)候

表示該函數(shù)是內(nèi)部連接,之在本文件中有效,別的文件中不能應(yīng)用該函數(shù).

不加static的函數(shù)默認(rèn)為是全局的.

也就是說在其他的.cpp中只要中明一下這個(gè)函數(shù),就可以使用它.

1、static全局變量與普通的全局變量有什么區(qū)別?static局部變量和普通局部變量有

什么區(qū)別?static困數(shù)與普通函數(shù)有什么區(qū)別?

答:全局變量(外部變量)的說明之前再冠以static就構(gòu)成了靜態(tài)的全局變量。全局

變量本身就是靜態(tài)存儲(chǔ)方式,靜態(tài)全局變量當(dāng)然也是靜態(tài)存儲(chǔ)方式。這兩者在存儲(chǔ)方

式上并無不同。這兩者的區(qū)別雖在于非靜態(tài)全局變量的作用域是整個(gè)源程序,當(dāng)一個(gè)源

程序由多個(gè)源文件組成時(shí),非靜態(tài)的全局變量在各個(gè)源文件中都是有效的。而靜態(tài)全局

變量則限制了其作用域,即只在定義該變量的源文件內(nèi)有效,在同一源程序的其它源

文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個(gè)源文件內(nèi),只能為該源文件

內(nèi)的函數(shù)公用,因此可以避免在其它源文件中引起錯(cuò)誤。

從以上分析可以看出,把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲(chǔ)方式即改變

了它的生存期。把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域,限制了它的使用范

圍。

static函數(shù)與普通函數(shù)作用域不同。static函數(shù)僅在本文件中使用。只在當(dāng)前源文

件中使用的函數(shù)應(yīng)該說明為內(nèi)部函數(shù)(static),內(nèi)部函數(shù)應(yīng)該在當(dāng)前源文件中說明和定

義。對(duì)于可在當(dāng)前源文件以外使用的函數(shù),應(yīng)該在一個(gè)頭文件中說明,要使用這些函數(shù)

的源文件要包含這個(gè)頭文件

static全局變量與普通的全局變量有什么區(qū)別:static全局變量只初使化一次,防

止在其他文件單元中被引用;

static局部變量和普通局部變量有什么區(qū)別:static局部變量只被初始化一次,下

一次依據(jù)上一次結(jié)果值;

static函數(shù)與普通函數(shù)有什么區(qū)別:static函數(shù)在內(nèi)存中只有一份,普通函數(shù)在每

個(gè)被調(diào)用中維持一份拷貝

2、如何引用一個(gè)已經(jīng)定義過的全局變量?

答:extern

可以用引用頭文件的方式,也可以用extern關(guān)鍵字,如果用引用頭文件方式來引

用某個(gè)在頭文件中聲明的全局受理,假定你將那個(gè)變寫錯(cuò)了,那么在編譯期間會(huì)報(bào)錯(cuò),

如果你用extern方式引用時(shí),假定你犯了同樣的錯(cuò)誤,那么在編譯期間不會(huì)報(bào)錯(cuò),而在

連接期間報(bào)錯(cuò)。

3、全局變量可不可以定義在可被多個(gè).C文件包含的頭文件中?為什么?

答:可以,在不同的C文件中以static形式來聲明同名全局變量。

可以在不同的C文件中聲明同名的全局變量,前提是其中只能有一個(gè)C文件中對(duì)此

變量賦初值,此時(shí)連接不會(huì)出錯(cuò)。

比較兩個(gè)浮點(diǎn)數(shù)大小

在計(jì)算機(jī)中表示一個(gè)浮點(diǎn)數(shù),其結(jié)構(gòu)如下:

尾數(shù)部分(定點(diǎn)小數(shù))階碼部分(定點(diǎn)整數(shù))

是2的指數(shù)形式來表示小數(shù)。因此一個(gè)小數(shù)用浮點(diǎn)數(shù)來表示,肯定是有誤差的。

比如說兩個(gè)運(yùn)算過程,它們的結(jié)果都是2,但是由于浮點(diǎn)運(yùn)算浮點(diǎn)數(shù)比較相等的時(shí)候,

用兩個(gè)數(shù)的相減,當(dāng)小于一個(gè)比較小的值時(shí),就認(rèn)為相等。

3D打印

3D打印,即快速成型技術(shù)的一種,它是一種以數(shù)字模型文件為基礎(chǔ),運(yùn)用粉末狀金屬或塑

料等可粘合材料,通過逐層打印的方式來構(gòu)造物體的技術(shù)。

3D打印通常是采用數(shù)字技術(shù)材料打卬機(jī)來實(shí)現(xiàn)的。常在模具制造、工業(yè)設(shè)計(jì)等領(lǐng)域被用于

制造模型,后逐漸用于一些產(chǎn)品的直接制造,已經(jīng)有使用這種技術(shù)打印而成的零部件。該技術(shù)在

珠寶、鞋類、工業(yè)設(shè)計(jì)、建筑、工程和施工(AEC)、汽車,航空航天、牙科和醫(yī)療產(chǎn)業(yè)、教育、

地理信息系統(tǒng)、土木工程、槍支以及其他領(lǐng)域都有所應(yīng)用。[1]

而所謂的3D打印機(jī)與普通打印機(jī)工作原理基本相同,只是打印材料有些不同,普通打印機(jī)

的打印材料是墨水和紙張,而3D打印機(jī)內(nèi)裝有金屬、陶瓷、塑料、砂等不同的“打印材料”,

是實(shí)實(shí)在在的原材料,打印機(jī)與電腦連接后,通過電腦控制可以把“打印材料”一層層疊加起來,

最終把計(jì)算機(jī)上的藍(lán)圖變成實(shí)物。通俗地說,3D打印機(jī)是可以“打印”出真實(shí)的3D物體的一

種設(shè)備,比如打印一個(gè)機(jī)器人、打印玩具車,打印各種模型,甚至是食物等等。之所以通俗地稱

其為“打印機(jī)”是參照了普通打ER機(jī)的技術(shù)原理,因?yàn)榉謱蛹庸さ倪^程與噴墨打印十分相似。這

項(xiàng)打印技術(shù)稱為3D立體打印技術(shù)。[2]

大數(shù)據(jù)

分析新數(shù)據(jù)源的業(yè)務(wù)需求

數(shù)據(jù)挖掘需要人工智能、數(shù)據(jù)庫、機(jī)器語言和統(tǒng)計(jì)分析知識(shí)等很多跨學(xué)科的知識(shí)。再

者,數(shù)據(jù)挖掘的出現(xiàn)需要條件,第一個(gè)條件:海量的數(shù)據(jù);第二個(gè)條件:計(jì)算機(jī)技術(shù)大

數(shù)據(jù)量的處理能力;第三個(gè)條件:計(jì)算機(jī)的存儲(chǔ)與運(yùn)算能力;第四個(gè)條件:交叉學(xué)科的

發(fā)展。

大數(shù)據(jù)只是數(shù)據(jù)挖掘的出現(xiàn)的一個(gè)條件。

更為復(fù)雜的新數(shù)據(jù)已經(jīng)出現(xiàn),而且生成的速度達(dá)到了前所未有的程度

社交網(wǎng)絡(luò)數(shù)據(jù)、網(wǎng)絡(luò)日志、存檔數(shù)據(jù)和傳感器數(shù)據(jù)都屬于人們?cè)诜治鲋嘘P(guān)注的新數(shù)據(jù)源

盡管傳統(tǒng)環(huán)境不斷發(fā)展,但如今出現(xiàn)了許多更為復(fù)雜的新數(shù)據(jù)類型,企業(yè)需要分析這些數(shù)據(jù)類型,

以便充實(shí)其已知信息。此外,這些新數(shù)據(jù)的生成速度遠(yuǎn)遠(yuǎn)超過了以往的紀(jì)錄。

客戶和潛在客戶正在社交網(wǎng)絡(luò)和評(píng)論網(wǎng)站中創(chuàng)建大量的新數(shù)據(jù)。此外,在線新聞項(xiàng)目、氣象數(shù)據(jù)、

競(jìng)爭(zhēng)對(duì)手網(wǎng)站內(nèi)容,甚至是數(shù)據(jù)市場(chǎng)如今都已經(jīng)成為可供企業(yè)使用的候選數(shù)據(jù)源。

在企業(yè)內(nèi)部,隨著客戶轉(zhuǎn)變?yōu)橐栽诰€渠道作為開展商業(yè)交易及與企業(yè)互動(dòng)的首選方法,網(wǎng)絡(luò)日志

也在不斷增加。分析所用的存檔數(shù)據(jù)再次增多,為監(jiān)測(cè)和優(yōu)化業(yè)務(wù)運(yùn)營(yíng)而部署的傳感器網(wǎng)絡(luò)和機(jī)

燃數(shù)量也越來越多。結(jié)果就生成了大量新數(shù)據(jù)源、快速增加的數(shù)據(jù)量和迅速增加的新數(shù)據(jù)流,需

要分析所有這些新數(shù)據(jù)。

在信息量如此龐大的背景下,為找尋關(guān)鍵問題的答案,現(xiàn)在的企業(yè)戰(zhàn)略對(duì)于信

息管理和利用能力的依賴性更勝于以往。

伴隨著井噴式的數(shù)據(jù)增長(zhǎng),孤立的數(shù)據(jù)存儲(chǔ)是造成信息管理和集成成本激增的主要原因。面對(duì)著

分赦于不同數(shù)據(jù)庫的孤立數(shù)據(jù),企業(yè)主管無法確保自己能夠全面掌握客戶、產(chǎn)品和供應(yīng)商的情況。孤

立的信息同樣也令遵守行業(yè)或政府法規(guī)的難度加大。

在巖息集成戰(zhàn)略和技術(shù)的幫助下,能夠在正確時(shí)間從任意來源檢索數(shù)據(jù),編排格式后再提供給企業(yè)內(nèi)

外的任意目標(biāo)。值息集成能夠幫助企業(yè)執(zhí)行許多關(guān)鍵任務(wù),其中包括將多個(gè)來源的數(shù)據(jù)加載到倉庫當(dāng)

中,整合應(yīng)用程序?qū)嵗?,以及將不同部門和分部的信息關(guān)聯(lián)起來。通過將企業(yè)信息整合成單一來源(不

論恃息存儲(chǔ)于什么位置),企業(yè)能夠快速處理信息,縮短停機(jī)時(shí)間,減少客戶服務(wù)問題,并在盡量不

影響性能的情況下分配信息。

IBM信息集成解決方案用于集成及轉(zhuǎn)化數(shù)據(jù)和內(nèi)容,進(jìn)而提供權(quán)威'一致、及時(shí)、完整的信息,并

且在數(shù)據(jù)的整個(gè)生命周期內(nèi)控制數(shù)據(jù)質(zhì)量。其近線性的無縫擴(kuò)展能力以及以元數(shù)據(jù)為驅(qū)動(dòng)的設(shè)計(jì)能夠

幫助企業(yè)將不同數(shù)據(jù)庫統(tǒng)一成單一的整合信息庫,以及識(shí)別和更正不準(zhǔn)確或冗余的數(shù)據(jù)。

給你解釋一下這些術(shù)語:

云升和:就是個(gè)炒得很熱的商業(yè)概念,其實(shí)說白了就是將計(jì)完任務(wù)轉(zhuǎn)移到服務(wù)器端,用戶只需要個(gè)顯

示器就行了,不過服務(wù)器的計(jì)算資源可以轉(zhuǎn)包。當(dāng)然,要想大規(guī)模商業(yè)化,這里還有些問題,特別是

隱私保護(hù)問題。

大數(shù)據(jù):說白了就是數(shù)據(jù)太多了。如今幾兆的數(shù)據(jù)在20年前也是大數(shù)據(jù)。但如今所說的大數(shù)據(jù)特殊在

哪昵?如今的問題是數(shù)據(jù)實(shí)在是太多了,這已經(jīng)超過了傳統(tǒng)計(jì)算機(jī)的處理能力(區(qū)別與量子計(jì)算機(jī)),

所以對(duì)于大數(shù)據(jù)我們不得不用一些折衷的辦法(比如數(shù)據(jù)挖掘),就是說沒必要所有數(shù)據(jù)都需要精確

管理,實(shí)際上有效數(shù)據(jù)很有限,用數(shù)據(jù)挖掘的方法把這些有限的知識(shí)提取出來就行了。?此外,數(shù)據(jù)

抽洋,數(shù)據(jù)壓縮也是解決大數(shù)據(jù)問題的一些策略。

數(shù)據(jù)挖掘:從數(shù)據(jù)中提取潛在知識(shí),這些知識(shí)可以描述或者預(yù)測(cè)數(shù)據(jù)的特性。有代表性的數(shù)據(jù)挖掘任

務(wù)包括關(guān)聯(lián)規(guī)則分析、數(shù)據(jù)分類、數(shù)據(jù)聚類等,這些你在任一本數(shù)據(jù)挖掘教材都可以了解。下面我說

說和大數(shù)據(jù)的區(qū)別:數(shù)據(jù)挖掘只是大數(shù)據(jù)處理的一個(gè)方法。烏云所說的大數(shù)據(jù),或者如今商業(yè)領(lǐng)域所

說的大數(shù)據(jù),實(shí)際上指的就是數(shù)據(jù)挖掘,其實(shí)真正所謂大數(shù)據(jù),或者Science雜志中提到的大數(shù)據(jù),

或者奧巴馬提出的大數(shù)據(jù)發(fā)展戰(zhàn)略,我的理解是,這些都遠(yuǎn)遠(yuǎn)大于數(shù)據(jù)挖掘的范疇,當(dāng)然數(shù)據(jù)挖掘是

其中很重要的一個(gè)方法。真正A的是如何將大數(shù)據(jù)進(jìn)行有效管理。

機(jī)搭學(xué)習(xí):這個(gè)詞很虛,泛指了一大類計(jì)算機(jī)算法。重點(diǎn)是學(xué)習(xí)這個(gè)詞,如果想讓計(jì)算機(jī)有效學(xué)習(xí),

目前絕大多數(shù)方法都采用了迭代的方法。所以在科研界,只要是采用了這種迭代并不斷逼近的策略,

?般都可以歸到機(jī)器學(xué)習(xí)的范疇?;鹜?,所謂學(xué)習(xí),肯定要知道學(xué)什么,這就是所謂訓(xùn)練集,從訓(xùn)練

集數(shù)據(jù)中計(jì)算機(jī)要學(xué)到其中的某個(gè)一般規(guī)律,然后用一些別的數(shù)據(jù)(即測(cè)試集)來看看學(xué)得好不好,

之后才能用于實(shí)際應(yīng)用。所以,選取合適的訓(xùn)練集也是個(gè)學(xué)問。

模式識(shí)別:意思就是模式的識(shí)別。模式多種多樣,可以是語言,可以是圖像,可以是事物一些有意義

的磅塊,這些都算。所以總體來說,模式識(shí)別這個(gè)詞我是覺得有點(diǎn)虛,倒是具體的人臉圖像識(shí)別、聲

音識(shí)別等,這些倒是挺實(shí)在的。也許是我不太了解吧。

另外說說你的其他問題。

傳統(tǒng)分析方法不包括數(shù)據(jù)挖掘。對(duì)了數(shù)據(jù)分析這塊我不是很了解,不過可以肯定的是,傳統(tǒng)分析都有

?定的分析方向,比如我就想知道這兩個(gè)商品的關(guān)聯(lián)情況,那我查查數(shù)據(jù)庫就行了。數(shù)據(jù)挖掘雖說有

些歷史,不過也挺時(shí)髦的,它是自動(dòng)將那些關(guān)聯(lián)程度大的商品告訴你,這期間不需要用戶指定數(shù)據(jù)分

析的具體對(duì)象。

如果想應(yīng)對(duì)大數(shù)據(jù)時(shí)代,數(shù)據(jù)挖掘這門課是少不了的。此外對(duì)數(shù)據(jù)庫,特別是并行數(shù)據(jù)庫、分布式數(shù)

據(jù)庫,最好r解點(diǎn)。至于機(jī)器學(xué)習(xí)和模式識(shí)別,這些總的來說和數(shù)據(jù)挖掘關(guān)系不太大,除r一些特殊

的領(lǐng)域外。

總之,概念挺熱,但大數(shù)據(jù)還很不成熟,無論從研究上還是商業(yè)化上。我目前在作大數(shù)據(jù)背景下的算

法研究,說實(shí)話,目前基本沒有拓展性非常強(qiáng)的算法,所以未來大數(shù)據(jù)的發(fā)展方向,我也挺迷茫。

PS:將數(shù)據(jù)挖掘應(yīng)用于商業(yè),最最重要的就是如何確定挖掘角度,這需要你對(duì)具體應(yīng)用的領(lǐng)域知識(shí)

非常了解,需要你有非常敏銳的眼光。至于數(shù)據(jù)挖掘的具體算法,這些就交給我們專門搞研究的吧!

(對(duì)算法的理解也很重要,這可以把算法拓展到你的應(yīng)用領(lǐng)域)

直方圖

灰度直方圖的定義

灰度直方圖是灰度級(jí)的函數(shù),描述圖像中該灰度級(jí)的像素個(gè)數(shù)(或該灰度級(jí)像素出現(xiàn)的頻率):其橫

坐標(biāo)是灰度級(jí),縱坐標(biāo)表示圖像中該灰度級(jí)出現(xiàn)的個(gè)數(shù)(頻率)。

[OpenCV]數(shù)字圖像灰度直方圖

灰度直方圖是數(shù)字圖像中最簡(jiǎn)單且有用的工具,這一篇主要總結(jié)OpenCV中直方圖CvHistogram的

結(jié)陶和應(yīng)用。

灰度直方圖的定義

灰度直萬圖是灰度級(jí)的函數(shù),描述圖像中該灰度級(jí)的像素個(gè)數(shù)(或該灰度級(jí)像素出現(xiàn)的頻率):其橫

坐赤是灰度級(jí),縱坐標(biāo)表示圖像中該灰度級(jí)出現(xiàn)的個(gè)數(shù)(頻率)。

一堆直方圖的結(jié)構(gòu)表示為

高雄直方圖可以理解為圖像在每個(gè)維度上灰度級(jí)分布的直方圖。常見的是二維直方圖。如紅?藍(lán)

直方圖的兩個(gè)分量分別表示紅光圖像的灰度值和藍(lán)光圖像灰度值的函數(shù)。其圖像坐標(biāo)(Dr,Db)

處對(duì)應(yīng)在紅光圖像中具有灰度級(jí)Dr同時(shí)在藍(lán)光圖像中具有灰度級(jí)Db的像素個(gè)數(shù)。這是基于多

光譜--每個(gè)像素有多個(gè)變量--的數(shù)字圖像,二維中對(duì)應(yīng)每個(gè)像素統(tǒng)計(jì)個(gè)變量。

OpenCV中的直方圖CvHistogram

注意我們?cè)谏厦胬斫庵狈綀D的意義時(shí)更多把他想象成一幅“圖”,繼而理解圖中橫坐標(biāo),縱坐標(biāo)的意

義。而在OpenCV中,應(yīng)該更多把直方圖看做“數(shù)據(jù)結(jié)構(gòu)”來理解。

OpenCV中用CvHistogram表示多維直方圖():

1typedefstructCvHistogram

2{

3inttype;

4CvArr*bins;〃存放每個(gè)灰度級(jí)數(shù)目的數(shù)組指針

5floatthresh[CV_MAX_DIM][2];〃均勻直方圖

6float**thresh2;〃非均勻直方圖

7CvMatNDmat;〃直方圖數(shù)組的內(nèi)部數(shù)據(jù)結(jié)構(gòu)

8}

9CvHistogram;

這個(gè)結(jié)構(gòu)看起來簡(jiǎn)單(比Ipllmage*元素少多了。。。)其實(shí)并不太好理解。

第一個(gè)成員type用來指定第二個(gè)成員bins的類型。OpenCv中常見到CvArr"的接口,可以用以指定

諸如CvMat、CvMatND.Ipllmage的類型,其實(shí)CvArr"的是一個(gè)指向void的指針。在函數(shù)內(nèi)部有時(shí)

需要得到確切的指向類型,這就需要type來指定。

thresh用來指定統(tǒng)計(jì)直方圖分布的上下界。比如[0255]表示用來統(tǒng)計(jì)羽像中像素分別在灰度級(jí)[0255]

區(qū)間的分布情況,CV_MAX_DIM對(duì)應(yīng)直方圖的維數(shù),假如設(shè)定二維紅?藍(lán)直方圖的thresh為[0255;100

200],就是分別統(tǒng)計(jì)紅色圖像灰度級(jí)在[0255]以及藍(lán)色圖像在灰度級(jí)[100200]的分布情況。

thresh用以指定均勻直方圖的分布,我們按每個(gè)像素理解自然是“均勻分布”,其實(shí)也可以統(tǒng)計(jì)像素

在幾個(gè)區(qū)間的分布。如果統(tǒng)計(jì)像素在2個(gè)區(qū)間的分布,則對(duì)應(yīng)[0255]的上下界,均勻分布統(tǒng)計(jì)的區(qū)間

即[0127][127255]分布的概率,這也是為什么thresh第二個(gè)維數(shù)默認(rèn)為2—會(huì)自動(dòng)均分上下界;

而thresh2指定非均勻的分布,這就需要指定每個(gè)區(qū)間的上下界,如果要統(tǒng)計(jì)直方圖在區(qū)間(0,

10,100,255)的分布,那需要指定由伊卜2的一個(gè)維度為[010100255],所以用float**形式表示。

mat簡(jiǎn)單說就是存儲(chǔ)了直方圖的信息,即我們統(tǒng)計(jì)的直方圖分布概率。

創(chuàng)建直方圖cvCreateHist()

OpenCV中用cvCreateHist()創(chuàng)建一個(gè)直方圖:

10CvHistogram*cvCreateHist(

11intdims,〃直方圖維數(shù)

12int*sizes,//直翻圖維數(shù)尺寸

13inttype,〃直方圖的表示格式

14float**ranges=NULLJ〃圖中方塊范圍的數(shù)組

15intuniform=l〃歸一化標(biāo)識(shí)

16);

size數(shù)組的長(zhǎng)度為dims,每個(gè)數(shù)表示分配給對(duì)應(yīng)維數(shù)的bin的個(gè)數(shù)。如dims=3,則size中用[s1,s2,s3]

分別指定每維bin的個(gè)數(shù)。

type有兩種:CVHIST_ARRAY意味著直方圖數(shù)據(jù)表示為多維密集數(shù)組CvMatND;

CV_HIST_TREE意味著直方圖數(shù)據(jù)表示為多維稀疏數(shù)組CvSparseMato

ranges就是那個(gè)復(fù)雜的不好理解的thresh的范圍,他的內(nèi)容取決于uniform的值。uniform為。是均

勻的,非。時(shí)不均勻。

計(jì)算圖像直方圖的函數(shù)為CalcHist():

I7voidcvCalcHist(

18Ipllmage**image,〃輸入圖像(也可用CvMat**)

19CvHistogram*hist,〃宜方圖指針

20intaccumulated,〃累il標(biāo)識(shí)。如果設(shè)置,則立方圖在開始時(shí)不被清零.

21constCvArr*mask=NULL//操作mask,確定輸入圖像的哪個(gè)象素被計(jì)數(shù)

22);

要注意的是這個(gè)函數(shù)用來計(jì)算一張[或多張)單通道圖像的出方圖,如果要計(jì)算多通道,則用這個(gè)函

數(shù)分別計(jì)算圖像每個(gè)單通道。

實(shí)踐:一維直方圖

下面實(shí)踐一下用OpenCV生成圖像的一維直方圖

23intmain()

24{

25Ipllmage*src=cvLoadImage("baboon.jpg");

26Ipllmage*gray_plane=cvCreateImage(cvGetSize(src),8,1);

cvCvtColor(src,gray_plane,CV_BGR2GRAY);

28inthist_size=256;〃直方圖尺寸

29inthist_height=256;

30floatrange"={0,255};〃灰度級(jí)的范圍

31float*ranges[]={range};

32〃創(chuàng)建一維直方圖,統(tǒng)計(jì)圖像在[0255]像素的均勻分布

CvHistogram*gray_hist=cvCreateHist(l,&hist_size,CV_HIST_ARRAY,ranges,1);

34〃計(jì)算灰度圖像的一維直方圖

35cvCalcHist(8gray_plane,gray_histJ0,0);

36〃歸一化直方圖

37cvNormalizeHist(gray_hist,1.0);

38intscale=2;

39〃創(chuàng)建一張一維直方圖的“圖”,橫坐標(biāo)為灰度級(jí),縱坐標(biāo)為像素個(gè)數(shù)<*scale)

40Ipllnidge*liibl_inidge=<.vCredleIriidge(<.vSize(liibl_bize*b<.dle,liibl_lieighL),8,3);

41cvZero(hist_image);

42〃統(tǒng)計(jì)直方圖中的最大直方塊

43floatmax_value=0;

44cvGetMinMaxHistValue(gray_hist,0,&max_value,0,0);

45〃分別將每個(gè)直方塊的值繪制到圖中

46for(inti=0;i<hist_size;i++)

47{

48floatbin_val=cvOueryHistValue_lD(gray_hist,i);〃像素i的概率

49intintensity=cvRound(bin_val*hist_height/max_value);〃要繪制的高度

50cvRectangle(hist_inage,

51cvPoint(i*scale,hist_height-l),

52cvPoint((i+1)*scale-1,hist_height-intensity),

53CV_RGB(255,255J255));

54}

55cvNamedWindow("GraySource",1);

56cvShowImage("GraySource",gray_plane);

57cvNamedWindow("H-SHistogram",1);

58cvShowImage("H-SHistogram",hist_image);

59cvWaitKey(0);

60}

試臉結(jié)果:

對(duì)應(yīng)的,我們可以用?樣的思路統(tǒng)計(jì)每個(gè)通道的直方圖,并繪制圖像每個(gè)通道像素的分布:

實(shí)踐:二維直方圖

我TJ也可以結(jié)合OpenCV的例/?生成二維直方圖:

61Ipllmage*r_plane=cvCreateImage(cvGetSize(src),8,1);

62Ipllmage*g_plane=cvCreateImage(cvGetSize(src),8,1);

63Ipllmage*bplane=cvCreateImage(cvGetSize(src),8,1);

64Ipllmage*planes[]={r_plane,g_plane};

65〃將HSV圖像分離到不同的通道中

66cvCvtPixToPlane(src,b_plane,g_plane,r_plane,0);

67//生成二維直方圖數(shù)據(jù)結(jié)構(gòu)

68intr_bins=256,b_bins=256;

69CvHistogram*hist;

70{

71inthist_size[]={r_bins,b_bins};

72floatr_ranges[]={0,255};//hueis[0,180]

73fludlb_r<ingej?[]=(0,255

74float*ranges[]={r_ranges,b_ranges};

hist=cvCreateHist(2,hist_size,CV_HIST_ARRAY,ranges,1);

%)

77〃計(jì)算一張或多張單通道圖像image(s)的直方圖

78cvCalcHist(planes,hist,0,0);

剛才的圖我們是對(duì)應(yīng)每個(gè)橫坐標(biāo)繪制縱坐標(biāo)的直方塊,二維的圖需要繪制每個(gè)點(diǎn):

79for(inth=0;h<r_bins;h++){

80for(ints=0;s<b_bins;s++){

81floatbin_val=cvQueryHistValue_2D(hist,h,s);//ff詢直方塊的值

82intintensity=cvRound(bin_val*255/max_value);

83cvRectangle(hist_img,

84cvPoint(h*scale,s*scale),

85cvPoint((h+l)*scale-1,(s+l)*scale-1),

86CV_RGB(intensity,intensity,intensity),

87CV_FILLED);

88}

89}

最終生成二維直方圖:

直方圖的應(yīng)用以后再討論。

[OpenCV]直方圖應(yīng)用:直方圖均衡化,直方圖匹配,對(duì)比直方圖

前面介紹了數(shù)字圖像灰度直方圖,現(xiàn)在來嘗試直方圖的應(yīng)用。

直方圖均衡化

直方圖均衡化(HistogramEqualization)是直方圖最典型的應(yīng)用,是圖像點(diǎn)運(yùn)算的一種。對(duì)于一幅

輸入圖像,通過運(yùn)算產(chǎn)生一幅輸出圖像,點(diǎn)運(yùn)算是指輸出圖像的每個(gè)像素點(diǎn)的灰度值由輸入像素點(diǎn)決

定,即:

直方圖均衡化是通過灰度變換將一幅圖像轉(zhuǎn)換為另一幅具有均衡直方圖,即在每個(gè)灰度級(jí)上都具有相

同的象素點(diǎn)數(shù)過程。從分布圖上的理解就是希望原始圖像中y軸的值在新的分布中盡可能的展開。變

換寸程是利用累積分布函數(shù)對(duì)原始分布進(jìn)行映射,生成新的均勻拉伸的分布。因此對(duì)應(yīng)每個(gè)點(diǎn)的操作

是尋找原始分布中y值在均勻分布中的位置,如下圖是理想的單純高斯分布映射的示意圖:

(圖片來源:<LearnningOpenCV>p189)

OpenCV中的cvEqualizeHist

OpenCV中有灰度直方圖均衡化的函數(shù)cvEqualizeHist,接口很明朗:

QOvoidrvFquali7PHifvArr*t”,CvArr*);

注意此函數(shù)只能處理單通道的灰色圖像,對(duì)于彩色圖像,我們可以把每個(gè)信道分別均衡化,再M(fèi)erge

為彩色圖像。

實(shí)踐:圖像直方圖均衡化

91intmain()

92{

93Ipllmage*image=cvLoadImage("baboon.jpg");

94〃顯示原圖及直方圖

95myShowHist("Source",image);

96Ipllmage*eqlimage=cvCreateImage(cvGetSize(image),image->depth>3);

97〃分別均衡化每個(gè)信道

98Ipllmage*redImage=cvCreateImage(cvGetSize(image),image->depthJl);

99Ipllmage*greenImage=cvCreateImage(cvGetSize(image),image->depth,l);

100Ipllmage*blueImage=cvCreateImage(cvGetSize(image),inage->depthJl);

101cvSplit(image,bluelmage,greenlmage,redlmage,NULL);

102cvEqualizeHist(redlmage,redlmage);

103cvEqualizeHist(greenimage,greenimage);

104cvEqualizeHist(blueimage,bluelmage);

105〃均衡化后的圖像

106cvMerge(blueImage,greenimage,redlmage,NULL,eqlimage);

107myShowHist("Equalized",eqlimage);

108)

原蛤圖像及灰度直方圖如下:

均衡化后的直方圖:

直方圖匹配

直方圖匹配乂叫直方圖規(guī)定化(His:ogramNormalization/Matching)是指對(duì)?副圖像進(jìn)行變換,使

其直方圖與另一幅圖像的直方圖或特定函數(shù)形式的直方圖進(jìn)行匹配。應(yīng)用場(chǎng)景如不同光照條件下的兩

幅圖像,我們可以在比較兩幅圖像前先進(jìn)行匹配變化。

參考shlkl99上傳的直方圖匹配代碼,將圖像規(guī)定化為高斯分布函數(shù)。

109〃將圖像與特定函數(shù)分布histv□兀配

110voidmyHistMatch(IplImage*img,doublehistv[])

Hl{

112intbins=256;

113intsizes[]={bins};

114CvHistogram*hist=cvCreateHist(1,sizes,CV_HIST_ARRAY);

115cvCalcHist(&img,hist);

116cvNormalizeHist(hist,l);

117doubleval_l=0.0;

118doubleval_2=0.0;

119ucharI[2bb]=

120doubleS[256]={0};

121doubleG[256]={0};

122for(intindex=。;index<256;++index)

123{

124val_l+=cvQueryHistValue_lD(hist,index);

125val_2+=histv[index];

126G[index]=val_2;

127S[index]=val_l;

128}

129doublemin_val=0.0;

130intPG=0;

131for(inti=0;i<256;++i)

132{

133min_val=1.0;

134for(intj=0;j<256;++j)

135

136if((G[j]-S[i])<min_val&&(G[j]-S[i])>=0)

137

138min.val=(G[j]-S[i]);

139PG=j;

140}

141}

142T[i]=(uchar)PG;

143)

144uchar叩=NULL;

145fur(inix=0;x<irng->heiglil

146(

147p=(uchar*)(img->imageData+img->widthStep*x);

148for(inty=0;y<img->width;++y)

149{

150P[y]=T[p[y]];

151)

152)

153)

154//生成高斯分布

155voidGenerateGaussModel(doublemodel[])

156{

157doubleml,m2,signal,sigma2,Al,A2,K;

158ml=0.15;

159m2=0.75;

160sigmal=0.05;

161sigma2■0.05;

162Al=1;

163A2=0.07;

164K=0.002;

165doublecl=Al*(1.0/(sqrt(2*CV_PI))*sigmal);

166doublekl=2*sigmal*sigmal;

167doublec2=A2*(1.0/(sqrt(2*CV_PI))*sigma2);

168doublek2=2*sigma2*sigma2;

169doublep=0.0,val=0.0,z-0.0;

170for(intzt=0;zt<256;++zt)

171{

172val=K+cl*exp(-(z-ml)*(z-ml)/kl)+c2*exp(-(z-m2)*(z-m2)/k2);

173model[zt]=val;

174

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論