《軟件工程實(shí)踐》項(xiàng)目總結(jié)報(bào)告圖像簡單處理系統(tǒng)
《《軟件工程實(shí)踐》項(xiàng)目總結(jié)報(bào)告圖像簡單處理系統(tǒng)》由會(huì)員分享,可在線閱讀,更多相關(guān)《《軟件工程實(shí)踐》項(xiàng)目總結(jié)報(bào)告圖像簡單處理系統(tǒng)(48頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告(2010/2011 學(xué)年 第 1 學(xué)期)項(xiàng)目名稱:圖像簡單處理系統(tǒng)班 級(jí):軟件 0801項(xiàng)目成員:2021 年 9 月軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 1 -項(xiàng)目評(píng)分歷次項(xiàng)目階段性評(píng)審得分歷次項(xiàng)目階段性評(píng)審得分第 1 次第 2 次第 3 次第 4 次第 5 次第 6 次最終名次2222112項(xiàng)目成員對(duì)項(xiàng)目貢獻(xiàn)比例(項(xiàng)目成員對(duì)項(xiàng)目貢獻(xiàn)比例(%)黃超趙劍華孫芳芳謝彩燕胡華東施盛楠19%19%14%16%18%14%項(xiàng)目自我評(píng)價(jià)與心得體會(huì)項(xiàng)目自我評(píng)價(jià)與心得體會(huì)黃超: 在本次項(xiàng)目的開發(fā)過程中,我主要擔(dān)任了項(xiàng)目組長的職務(wù)。在對(duì)項(xiàng)目進(jìn)行管理方面進(jìn)了自己最大的能力與心力去做了,但還是存在
2、很多不足的。通過這次開發(fā),我第一次感受到了開發(fā)一個(gè)項(xiàng)目的不容易。首先是在項(xiàng)目成員的管理上,由于人員較多,項(xiàng)目不同于其他的基于 WEB 的項(xiàng)目,在任務(wù)分配后各小組進(jìn)度不同,很難進(jìn)行系統(tǒng)的集成。所以在項(xiàng)目后期集成方面遇到了很多問題。同時(shí)通過這次項(xiàng)目開發(fā)也令我懂得了更多關(guān)于團(tuán)隊(duì)之間的協(xié)作的重要性。孫芳芳: 我們項(xiàng)目起初是作為創(chuàng)新項(xiàng)目在開發(fā)軟件,所以我們?cè)谑罴俚臅r(shí)候就有在學(xué)習(xí)和開發(fā),起步相對(duì)其他小組比較早,但是雖然如此,由于在后階段并沒有像起初一樣的積極性,在后面開發(fā)的內(nèi)容并不多,導(dǎo)致最后趕得特別不易,這是我覺得下次開發(fā)需要改進(jìn)的地方。我也從本次實(shí)踐課中學(xué)到了很多東西,比方說團(tuán)隊(duì)合作與溝通,比方多新知
3、識(shí)的學(xué)習(xí)等等。趙劍華: 在一個(gè)學(xué)期的實(shí)踐中,不僅加強(qiáng)了編碼能力,同時(shí)也加強(qiáng)了溝通交流能力,另外還鍛煉了演講能力。面對(duì)軟件的不斷重構(gòu)以及軟件功能不斷更新,完善,在鍛煉編碼能力的同時(shí)還加強(qiáng)了代碼的管理能力,使我的編碼風(fēng)格有很大的改進(jìn)。在編碼完成自己部分功能的同時(shí)不斷與團(tuán)隊(duì)隊(duì)員之間的溝通,并且不斷地了解,使我明白要怎么樣更好的與團(tuán)隊(duì)之間進(jìn)行溝通,以及怎么去處理隊(duì)員與隊(duì)員之間的問題。這個(gè)學(xué)期里,為了軟件付出了挺多,當(dāng)然得到了也很多。最主要的不是有多辛酸辛苦,而且能力得到了,這個(gè)是最主要的,是生活中最需要的。在此感謝軟件工程實(shí)踐為我?guī)淼囊磺小J┦㈤很浖こ虒?shí)踐中我們已做了一學(xué)期圖形圖像的項(xiàng)目,但是并
4、不成功,下學(xué)期要放棄做別的項(xiàng)目,我心里還是比較不痛快的。但是技術(shù)存在難題,這讓大家有點(diǎn)徒嘆奈何的感慨。第一次和團(tuán)隊(duì)做項(xiàng)目,大家都是第一次,對(duì)于項(xiàng)目的具體流程雖然有老師的指導(dǎo),但是配合上還是出現(xiàn)了很多問題。我感覺我們小組并沒出現(xiàn)什么化學(xué)反應(yīng),大家都不溫不火的在做,一開始興趣還比較大,但是后來就有點(diǎn)泄氣了??墒亲鲕浖?xiàng)目并不是個(gè)憑興趣的事情,這是需要大家負(fù)擔(dān)自己責(zé)任的?;蛟S就像老師說的,我們肩上的壓力不軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 2 -夠大吧,人有時(shí)候就是要逼自己才好。胡華東: 在此次項(xiàng)目開發(fā)過程中,不僅鍛煉了自己的代碼編程能力,文檔編寫能力,加強(qiáng)了小組成員之間的溝通能力,而且改善了編碼風(fēng)格。在編
5、碼完成自己部分功能的同時(shí)不斷與團(tuán)隊(duì)隊(duì)員之間的溝通,并且不斷地了解,使我明白要怎么樣更好的與團(tuán)隊(duì)之間進(jìn)行溝通,以及怎么去處理隊(duì)員與隊(duì)員之間的問題。這個(gè)學(xué)期里,為了軟件付出了挺多,當(dāng)然得到了也很多。最主要的不是有多辛酸辛苦,而且能力得到了,這個(gè)是最主要的,是生活中最需要的。在此感謝軟件工程實(shí)踐為我?guī)淼囊磺?。教師評(píng)分教師評(píng)分優(yōu) 良 中 及格 不及格軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 1 -目 錄1 項(xiàng)目概況項(xiàng)目概況 .21.1 團(tuán)隊(duì)組成.21.2 開發(fā)環(huán)境.21.3 需求概述.21.3.1項(xiàng)目背景.31.3.2現(xiàn)狀分析.31.3.3項(xiàng)目意義.31.3.4適用范圍.42 需求需求說說明明 .42.12.1
6、分割功能:分割功能: .42.2 合成功能:.52.3 修復(fù)功能:.53 架構(gòu)設(shè)計(jì)架構(gòu)設(shè)計(jì) .63.1 功能設(shè)計(jì).63.2 概要設(shè)計(jì).63.2.1 分割功能.63.3 合成功能:.93.4 修補(bǔ)實(shí)現(xiàn):.104 迭代迭代日日志志 .124.1 界面迭代:.124.2 分割迭代:.174.3 合成迭代:.184.4 修補(bǔ)迭代:.195 分工分工情情況況 .216FAQ.2261 環(huán)境配置:.2262 代碼編寫:.3063 項(xiàng)目管理:.416.3.1人員管理.416.3.2時(shí)間安排.416.3.3小組溝通問題.426.3.4小組進(jìn)度緩慢.426.4 其他問題:.426.5 FAQ 的數(shù)量統(tǒng)計(jì)表 .4
7、2軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 2 -1 項(xiàng)目概況項(xiàng)目概況1.1 團(tuán)隊(duì)組成團(tuán)隊(duì)組成本項(xiàng)目一共由 6 人組成,其中根據(jù)軟件功能又分為 4 個(gè)小組,分別為界面設(shè)計(jì)小組:趙劍華;圖像分割小組:黃超、孫芳芳;圖像合成小組:XXX、XX;圖像修復(fù)小組:XXX、XXX。組長由 XXX 擔(dān)任。1.2 開發(fā)環(huán)境開發(fā)環(huán)境本項(xiàng)目開發(fā)工具主要使用了 Microsoft Visual Studio.NET 2003,同時(shí)還使用了 OpenCV 1.0 的類庫,所使用的操作系統(tǒng)為 Windows XP。1.3 需求概述需求概述1.3.1 項(xiàng)目背景項(xiàng)目背景 隨著計(jì)算機(jī)科學(xué)的飛速發(fā)展,虛擬現(xiàn)實(shí)技術(shù)已滲透進(jìn)入了軍事、工程、醫(yī)學(xué)
8、、教育等各個(gè)方面, 并且在這些領(lǐng)域中起著重要的作用。如海灣戰(zhàn)爭的美國士兵對(duì)周邊的環(huán)境不覺得陌生,是由于虛擬現(xiàn)實(shí)已把他們帶入那漫無邊際的風(fēng)塵黃沙,讓他們“身臨其境”感受到大漠的荒涼。虛擬現(xiàn)實(shí)技術(shù)是一種可以創(chuàng)建和體驗(yàn)虛擬世界的計(jì)算機(jī)仿真系統(tǒng),它利用計(jì)算機(jī)生成一種模擬環(huán)境,是一種多源信息融合的交互式的三維動(dòng)態(tài)視景和實(shí)體行為的系統(tǒng)仿真,使用戶沉浸到該環(huán)境中去。虛擬現(xiàn)實(shí)技術(shù)是仿真技術(shù)的一個(gè)重要方向,是仿真技術(shù)與計(jì)算機(jī)圖形學(xué)、人機(jī)接口技術(shù)、多媒體技術(shù)、傳感技術(shù)、網(wǎng)絡(luò)技術(shù)等多種技術(shù)的集合,是一門富有挑戰(zhàn)性的交叉技術(shù)、前沿學(xué)科和研究領(lǐng)域。美國對(duì)此的投資從 80 年代的幾千美金到現(xiàn)在 14 個(gè)億足以說明其重要性
9、。軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 3 -1.3.2 現(xiàn)狀分析現(xiàn)狀分析 近年來,計(jì)算機(jī)圖像技術(shù)的飛速發(fā)展和應(yīng)用使個(gè)人電腦上的美術(shù)創(chuàng)作進(jìn)入一個(gè)新的階段,各種圖像處理軟件也越來越完善,普及程度不斷地提高。其中的圖像處理軟件 Photoshop 是目前公認(rèn)的較好用的通用美術(shù)設(shè)計(jì)軟件。它包括的功能有:可以對(duì)圖像進(jìn)行修飾、對(duì)圖形進(jìn)行編輯、對(duì)圖像的色彩進(jìn)行處理等。在實(shí)際生活中人們通常將數(shù)碼相機(jī)拍攝下來的照片利用圖像處理軟件來進(jìn)行編輯和修飾,現(xiàn)在越來越多的用戶不僅僅是滿足與單純的圖像處理,更希望利用圖像處理軟件來進(jìn)行高質(zhì)量的廣告設(shè)計(jì)、美術(shù)創(chuàng)意和三維動(dòng)畫。利用圖像處理軟件制作圖形,要生產(chǎn)一個(gè)好的作品包括三個(gè)方面的內(nèi)
10、容:創(chuàng)意、構(gòu)圖能力、計(jì)算機(jī)表達(dá)。即首先要有好的創(chuàng)意,然后對(duì)其進(jìn)行粗略構(gòu)圖,然后借助計(jì)算機(jī)手段,制作出所構(gòu)想的最終效果圖。由于圖像處理軟件的功能強(qiáng)大,目前正被越來越多的圖像編排、廣告和形象設(shè)計(jì)以及婚紗影樓等領(lǐng)域廣泛使用,是非常受歡迎的軟件類別。1.3.3 項(xiàng)目意義項(xiàng)目意義本項(xiàng)目擬研究以對(duì)象分割、圖像修復(fù)和圖像合成為核心的基于圖像的編輯與繪制技術(shù),并基于此開發(fā)一個(gè)虛擬現(xiàn)實(shí)場景圖像的特效制作軟件系統(tǒng)。首先,研究基于筆刷的對(duì)象分割算法,實(shí)現(xiàn)少量交互輔助下的便捷景物提取;此技術(shù)可用于圖像的切割,切割下的圖像可以黏貼至其他圖像,可用于合成新的場景和圖像。利用該項(xiàng)技術(shù)人們可以對(duì)自己喜歡的場景方便的進(jìn)行截取,
11、進(jìn)行圖像處理更加方便。然后,研究圖像的修復(fù)和拼接算法,實(shí)現(xiàn)景物移除后所遺留的空白區(qū)域的自動(dòng)填補(bǔ);使得新的圖像看不出剪裁過的痕跡且沒有裂縫。利用該技術(shù)可以使原有圖像在切割掉的基礎(chǔ)上依然保持圖像的完整性和連續(xù)性。最后,研究圖像的融合和合成算法,實(shí)現(xiàn)克隆景物與已有場景的無縫合成。通過這個(gè)系統(tǒng),我們可以方便地移除圖像中不需要的景物、添加進(jìn)原來沒有的景物或者重新編排圖像中已有景物的位置,制作和生成新的虛擬現(xiàn)實(shí)場景圖像。此系統(tǒng)在現(xiàn)實(shí)生活中也有很廣泛的應(yīng)用,例如,對(duì)于舊照片的修復(fù),照片的合成以及制作電影特效等。同時(shí)還可以給人帶來很好的娛樂效果,人們可以利用軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 4 -系統(tǒng)制作自己喜歡的
12、圖像,合成搞笑的圖像等。本項(xiàng)目的開發(fā)從娛樂和實(shí)用的角度都具有很重要的意義。1.3.4 適用范圍適用范圍本軟件適合于對(duì)各種格式的數(shù)字圖像進(jìn)行處理。2 需求說明需求說明界面功能主要有打開,保存,視圖等基本功能,并且對(duì)功能分割,修補(bǔ),合成功能的接口處理。程序分兩部分,一部分為分割和修補(bǔ),另一部分為合成。由兩個(gè)界面構(gòu)成,在分割和修補(bǔ)界面,界面中包含打開,圈定分割區(qū)域,分割,調(diào)色,改變位圖等工具欄功能,并且對(duì)分割后的圖像能夠進(jìn)行修補(bǔ)操作。在合成界面,具有打開圖片,選定需要獲取的圖像信息,以及合成等功能。2.1 分割功能分割功能:總體需求可以歸結(jié)為基于圖像分割算法實(shí)現(xiàn)景物的精確提取功能。具體通過以下三個(gè)方
13、面實(shí)現(xiàn)。在功能方面,實(shí)現(xiàn)對(duì)所框部分的圖像進(jìn)行前景的提取及顯示,對(duì)該圖像背景和灰度圖像進(jìn)行保存,傳給其他功能模塊圖像的掩膜。在性能方面,時(shí)間特性要求:圖像對(duì)鼠標(biāo)操作的響應(yīng)時(shí)間較短;能進(jìn)行較快的處理分割操作。靈活性要求:可以改變分割圖像的大??;可以改變所提取前景的顏色。在接口方面,得到界面所給的矩形框出的需要處理的圖像的信息,同時(shí)得到被框圖像的左上角和右下角坐標(biāo)。傳回處理好圖像的 image 指針,圖像的信息和物體的輪廓線指針及掩膜。2.2 合成功能:合成功能:我們要實(shí)現(xiàn)的功能模塊是將兩幅或多幅圖像中的信息綜合到一幅圖像中,實(shí)現(xiàn)添加進(jìn)的克隆景物與已有景物的無縫集成,滿足亮度、顏色和結(jié)構(gòu)信息的連續(xù)性
14、和語義合理性。首先我們要對(duì)將要進(jìn)行融合的圖片進(jìn)行預(yù)處理,讓原圖像和待合成圖像不存在明顯的幾何畸變,在圖像質(zhì)量不理想的情況下進(jìn)行圖像融合,如果不經(jīng)過預(yù)處理,很容易造成一些誤匹配。軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 5 -下一步是圖像配準(zhǔn),主是對(duì)參考圖像和待融合圖像中的匹配信息進(jìn)行提取,在提取出的信息中尋找最佳的匹配,完成圖像間的對(duì)齊。圖像融合的成功與否主要是取決于圖像的配準(zhǔn)。待融合的圖像之間,可能存在平移、旋轉(zhuǎn)、縮放等多種變換或者大面積的同色區(qū)域等很難匹配的情況,我們將努力實(shí)現(xiàn)能在多種情況下準(zhǔn)確找到圖像間的對(duì)應(yīng)信息,將圖像對(duì)齊。在完成圖像配準(zhǔn)以后,就要對(duì)圖像進(jìn)行縫合,并對(duì)縫合的邊界進(jìn)行平滑處理,使圖像間
15、的合成縫隙不明顯,融合更自然。2.3 修復(fù)功能:修復(fù)功能:圖像修復(fù)是一項(xiàng)古老的藝術(shù),最早可以追溯到歐洲文藝復(fù)興時(shí)期,為了恢復(fù)遭受破壞的美術(shù)作品,藝術(shù)家們利用人的感知力和想象力對(duì)作品的裂痕等受損區(qū)域進(jìn)行修補(bǔ),使其恢復(fù)和保持圖像的完整性。這一技術(shù)就稱之為Inpainting(修復(fù),潤飾)或稱為 Retouching(分涂,修正) 。修復(fù)目的:對(duì)有劃痕或者破損的圖片進(jìn)行數(shù)字掃描后加以修復(fù);在圖像上面增加或者去除物體,比如電影后期制作中發(fā)現(xiàn)圖像中出現(xiàn)了多余的物體,麥克風(fēng),電線等的移除;修補(bǔ)信息缺失區(qū)域,如在數(shù)字圖像或視頻的獲取、處理、壓縮、傳輸和解壓縮過程中因信息丟失所留下的信息缺損區(qū)。需要修補(bǔ)圖像文
16、件來源不確定,可由用戶自行指定,一般為存儲(chǔ)于本地磁盤的特定圖像文件。圖像文件一般為部分破損、信息缺失、圖像信息贅余等情況的的文件。圖像修復(fù)過程,對(duì)受到損壞的圖像進(jìn)行修復(fù)重建或者去除圖像中的多余物體。例如:照片修復(fù)、去除污物、去除文字、去除目標(biāo) 等行為即為此功能實(shí)現(xiàn)效果需求。軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 6 -3 架構(gòu)設(shè)計(jì)架構(gòu)設(shè)計(jì)3.1 功能設(shè)計(jì)功能設(shè)計(jì)本軟件主要功能分為數(shù)字圖像的對(duì)象分割、圖像修復(fù)和圖像合成四部分。首先,研究基于筆刷的對(duì)象分割算法,實(shí)現(xiàn)少量交互輔助下的便捷景物提??;此技術(shù)可用于圖像的切割,切割下的圖像可以黏貼至其他圖像,可用于合成新的場景和圖像。利用該項(xiàng)技術(shù)人們可以對(duì)自己喜歡的場
17、景方便的進(jìn)行截取,進(jìn)行圖像處理更加方便。然后,研究圖像的修復(fù)和拼接算法,實(shí)現(xiàn)景物移除后所遺留的空白區(qū)域的自動(dòng)填補(bǔ);使得新的圖像看不出剪裁過的痕跡且沒有裂縫。利用該技術(shù)可以使原有圖像在切割掉的基礎(chǔ)上依然保持圖像的完整性和連續(xù)性。最后,研究圖像的融合和合成算法,實(shí)現(xiàn)克隆景物與已有場景的無縫合成。通過這個(gè)系統(tǒng),我們可以方便地移除圖像中不需要的景物、添加進(jìn)原來沒有的景物或者重新編排圖像中已有景物的位置,制作和生成新的虛擬現(xiàn)實(shí)場景圖像。人們可以利用系統(tǒng)制作自己喜歡的圖像,合成搞笑的圖像等。3.2 概要設(shè)計(jì)概要設(shè)計(jì)3.2.1 分割功能分割功能主要思想主要思想:1通過高斯混合模型來描述前景與背景的分布。2通
18、過迭代方法求取高斯混合模型中的各個(gè)參數(shù)。3通過非完全標(biāo)記方法,用戶只需利用矩形框標(biāo)記處背景區(qū)域即可。4通過與高斯混合模型進(jìn)行比較后,將得出的前景輪廓以鏈表的形式返回。軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 7 -功能流程圖功能流程圖:獲取矩形坐標(biāo)值采樣建立高斯模型判斷像素點(diǎn)是否匹配輸出前景輪廓提取完成圖 3代碼實(shí)現(xiàn):代碼實(shí)現(xiàn):1從用戶交互界面得到用戶確定的矩形的坐標(biāo)(左上角和右下角) 。2使用 cvKMeans2()函數(shù)對(duì)高斯模型進(jìn)行聚類。從確定的矩形的中心開始采樣,并對(duì)沿著 2 條對(duì)角線方向,取適量像素。3建立高斯混合模型1)定義 5 個(gè)高斯模型組件,對(duì)其進(jìn)行初始化(全部為 1 或全部為 0) 。(將每
19、個(gè)像素的像素值代入到高斯方程中進(jìn)行估算,以便將適合的像素點(diǎn)劃分到各個(gè)高斯模型組件中。 )2)利用迭代最小化方法求取混合高斯模型的參數(shù)(主要是均值和方差):混合高斯模型給出的概率密度函數(shù)實(shí)際上是幾個(gè)高斯概率密度函數(shù)的加權(quán)和: 軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 8 -其中 . 定義事件 , 則 . 據(jù)此可以產(chǎn)生服從上述混合高斯概率密度分布的樣本. 混合分布的均值為 方差為 a為未知區(qū)域的每個(gè)像素點(diǎn) n 設(shè)置高斯混合模型參數(shù) b由圖像中各個(gè)像素的數(shù)據(jù)求得高斯混合模型參數(shù) U U (,(, k,k, z)z) = = DD (n(n , , knkn , znzn ) )D D (n(n , , knkn
20、, z)z) = = - - loglog p p ( ( znzn | | nn , , knkn ,),) - - logwlogw (n(n , , knkn ) )其中p () 是高斯概率分布, w () 是該高斯模型的樣本數(shù)在總樣本中權(quán)值c利用最小化能量來得到初始分割d回到步驟 a 重復(fù)執(zhí)行,直到收斂為止;e進(jìn)行邊界優(yōu)化。 4對(duì)矩形框中圖像的每一個(gè)像素進(jìn)行處理,看是否匹配某個(gè)模型,若匹配則將軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 9 -該像素標(biāo)記為 1,若不匹配則標(biāo)記為 0。 利用 for 循環(huán)對(duì)矩形內(nèi)的像素點(diǎn)進(jìn)行遍歷,定義一個(gè)表示各像素匹配結(jié)果的變量,當(dāng)像素符合高斯模型的特征值時(shí),將該變量標(biāo)記
21、為 1,否則標(biāo)記為0。5利用循環(huán)遍歷矩形中各像素的匹配特征值,將變量值為 1 的像素點(diǎn)坐標(biāo)建立成鏈表返回。3.3 合成功能:合成功能:主要思路主要思路:對(duì)于每幅數(shù)字圖像,我們都可以看成由確定的像素組成,假設(shè)圖像的每個(gè)像素看成由圖像分割的每個(gè)網(wǎng)格。假設(shè) S 和是無限像素網(wǎng)格中的有限點(diǎn)集。注意到 S 可能包含了網(wǎng)格中的所有像素,也可能只是部分像素。對(duì)于 S 中的每個(gè)像素 p,Np 是 S 中相關(guān)四個(gè)像素的集合。表示一對(duì)像素,其中 q 屬于 Np; 的邊界;fp 表示 f 函數(shù)中 p 點(diǎn)的值。我們的目的是使得將泊松方程變幻后最終可得到: 其中 f*是 S 中除去領(lǐng)域中的一個(gè)已知函數(shù),f 是中定義的一
22、個(gè)未知函數(shù)。當(dāng)包含 S 邊緣像素時(shí),如果延伸到整個(gè)網(wǎng)格區(qū)域時(shí),p 有截短領(lǐng)域,|Np|4 也就是 Np 屬于.方程可簡化成:其中 vpq 是 v((p+q)/2)在向量 pq 上的投影。求解出該方程組,得到新的像素值。功能流程圖功能流程圖:軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 10 -打開需處理圖像建立泊松方程解方程更新被融合圖像像素,越界像處理返回新圖像融合完成圖 4代碼實(shí)現(xiàn)代碼實(shí)現(xiàn):代碼實(shí)現(xiàn)上主要涉及到三個(gè)函數(shù),divengence()函數(shù)對(duì)圖像的特征進(jìn)行提取,求出圖像的散度。posionPaste()函數(shù),實(shí)現(xiàn)兩幅圖像的融合。其中 possionPaste中調(diào)用的子函數(shù) doCal()對(duì)圖像泊松方
23、程進(jìn)行求解。3.4 修補(bǔ)實(shí)現(xiàn):修補(bǔ)實(shí)現(xiàn):主要思想:主要思想:修補(bǔ)模塊分為修補(bǔ)主函數(shù),輪廓函數(shù),計(jì)算優(yōu)先級(jí)函數(shù),修補(bǔ)函數(shù)。1 修補(bǔ)主函數(shù)獲取上層分割完成后傳入的帶修補(bǔ)圖像指針和 Mask 模板圖指針,Mask 模板圖作為傳入的帶修補(bǔ)圖像任意像素是否真實(shí)的對(duì)照表。將待修補(bǔ)圖像指針和 Mask 模板圖指針傳給輪廓函數(shù)。2 輪廓函數(shù)建立原圖像待修補(bǔ)區(qū)域輪廓的鏈表,依操作據(jù)輪廓鏈表節(jié)點(diǎn)對(duì)圖像相應(yīng)像素進(jìn)行。對(duì)輪廓鏈表的每個(gè)節(jié)點(diǎn)調(diào)用優(yōu)先級(jí)函數(shù)。優(yōu)先級(jí)函數(shù)獲取傳入像素點(diǎn)位置,可計(jì)算任意點(diǎn)像素的優(yōu)先級(jí)。3 對(duì)輪廓中優(yōu)先級(jí)最大的點(diǎn)調(diào)用修補(bǔ)函數(shù),通過搜尋與以該點(diǎn)為樣本塊最相似的區(qū)域來填充樣本塊,完成修補(bǔ),更新 Ma
24、sk 模板圖和帶修補(bǔ)區(qū)域輪廓。重復(fù) 23 步,直至輪廓鏈表為空。功能流程圖功能流程圖:軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 11 -邊界不為空邊界為空修補(bǔ)主函數(shù)Repair()確定待修補(bǔ)區(qū)域邊界線邊界是否為空計(jì)算邊界點(diǎn)優(yōu)先級(jí)修補(bǔ)優(yōu)先級(jí)最大的點(diǎn)更新Mask模板圖修補(bǔ)完成圖 5軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 12 -4 迭代日志迭代日志4.1 界面迭代:界面迭代: 第一次迭代:界面需求功能的確定,界面初步具有文件,編輯,視圖,工具欄等基本功能圖 6第二次迭代:增加界面菜單功能,工具欄功能a)文件菜單: 圖 7b)編輯菜單:圖 8c)視圖菜單:軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 13 -圖 9第三次迭代:程序能夠打開圖片
25、,并且能畫出一個(gè)矩形確定范圍(格式為JPG 和 BMP)圖 10圖 11第四次迭代:修改界面,去掉編輯功能,增加 process 菜單:包括功能打開新圖,以及獲取矩形框里圖像 圖 12軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 14 -Process 菜單: 圖 13第五次迭代:添加 New_Image 功能代碼:形成副圖圖 14 圖中黑色部分為副圖打開的顯示位置第六次迭代:完成副圖上的打開圖片和重新圈定功能:打開圖片軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 15 -圖 15圈定功能:圖 16第七次迭代:完成 process 菜單中,cut_image 功能軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 16 -圖 17Cut_image 功
26、能完成后,圈定出來得部分如圖左上顯示第八次迭代:完成保存部分圖像圖 18第九次迭代:重做界面,分割和修補(bǔ)一程序界面,合成一個(gè)程序界面 完成分割修補(bǔ)界面:軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 17 -圖 19文件菜單: 圖 20操作: 圖 21幫助: 圖 22完成合成界面: 圖 23文件菜單: 圖 24軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 18 -4.2 分割迭代:分割迭代:第一次迭代:項(xiàng)目組成立第一次會(huì)議,集體討論分工,以及分組。初步學(xué)習(xí) OpenCV 以及數(shù)字圖像處理方面的知識(shí)。了解當(dāng)今的圖像處理軟件的前景和現(xiàn)狀,并對(duì)常用的功能以及原理有所了解。第二次迭代:閱讀圖像分割的相關(guān)方面資料,運(yùn)用 OpenCV 完成程
27、序:在一幅圖片上繪制正弦曲線,改變線寬,填充顏色,實(shí)現(xiàn)小球沿曲線滾動(dòng)。第三次迭代:對(duì)第二階段練習(xí)的程序進(jìn)行完善,鞏固軟件的編寫基礎(chǔ)。第四次迭代:對(duì)分割功能模塊的相關(guān)算法進(jìn)行閱讀與理解,確定各個(gè)模塊間的參數(shù)傳遞以及界面的接口設(shè)計(jì),嘗試編寫功能代碼。第五次迭代:從多個(gè)算法中確定要使用的算法,并對(duì)這些算法進(jìn)行深刻理解,對(duì)功能代碼進(jìn)行些微的變動(dòng)及完善。第六次迭代:主攻編寫功能實(shí)現(xiàn)代碼及調(diào)試,檢驗(yàn)算法的完善程度。第七次迭代:與其他小組的進(jìn)行詳細(xì)討論,適當(dāng)修改代碼以便能很好得集成到一起。第八次迭代:與界面進(jìn)行集成。4.3 合成迭代:合成迭代:第一次迭代:開發(fā)工具的學(xué)習(xí):開始接觸這個(gè)工程的時(shí)候首先是對(duì)開發(fā)軟
28、件的新工具 OpenCv 的學(xué)習(xí). 首先安裝 visual studio2003 和 openCV1.0 開發(fā)環(huán)境,熟悉 visual studio2003 各類工具操作和學(xué)習(xí) openCV 基礎(chǔ),編寫練習(xí)簡軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 19 -單的 openCV 程序,如圖像的讀寫訪問轉(zhuǎn)換等,主要學(xué)習(xí) OpenCv 中的函數(shù),函數(shù)的參數(shù)以及具體如何調(diào)用. 練習(xí)簡單的 openCV 程序,如圖像的讀寫訪問轉(zhuǎn)換等。參考的資料主要有。第二次迭代:九月中(1120 號(hào))代碼練習(xí):通過小例子練習(xí)對(duì)圖像的操作,主要的程序練習(xí):打開一幅圖像,以圖像四條邊的中點(diǎn)為頂點(diǎn)畫一個(gè)菱形,在菱形框中填充顏色,并設(shè)置菱形
29、邊的寬度和顏色,在菱形邊上畫一個(gè)小球,小球沿著菱形邊做循環(huán)運(yùn)動(dòng).通過對(duì)該功能的實(shí)現(xiàn)主要熟悉了對(duì)圖像像素進(jìn)行操作,以及如何用鏈表存儲(chǔ)圖像信息.第三次迭代:明確項(xiàng)目需求,編寫需求文檔:參加這個(gè)項(xiàng)目以后,就軟件的整體需求開過多次會(huì)議,在代碼練習(xí).在明確了項(xiàng)目需求后,通過小組討論劃分了三個(gè)小組,分別實(shí)現(xiàn)軟件的不同功能點(diǎn).我們小組主要負(fù)責(zé)圖像融合算法的實(shí)現(xiàn).通過參考資料和文檔對(duì)該功能的進(jìn)一步理解,這一階段主要內(nèi)容是對(duì)算法的理解,以及對(duì)功能實(shí)現(xiàn)的初步架構(gòu).初步編寫技術(shù)文檔。第四次迭代:整體架構(gòu)設(shè)計(jì),細(xì)化需求文檔:在對(duì)圖像融合算法有了總體理解的基礎(chǔ)上,要求對(duì)整個(gè)功能的實(shí)現(xiàn)提出整體的架構(gòu)設(shè)計(jì),并以技術(shù)文檔的形
30、式進(jìn)行闡述.小組成員的工作進(jìn)行進(jìn)一步細(xì)分.根據(jù)圖像融合算法主要實(shí)現(xiàn)的兩大塊,列方程和求解方程.小組討論各自負(fù)責(zé)一個(gè)模塊. 這一階段要求對(duì)算法有明確的理解和初步實(shí)現(xiàn)代碼的整體思路,對(duì)項(xiàng)目技術(shù)文檔進(jìn)行進(jìn)一步細(xì)化,畫出整體流程框圖,編寫部分偽代碼。第五次迭代:代碼實(shí)現(xiàn):根據(jù)先前的思路以及對(duì)整個(gè)融合功能的理解,通過相關(guān)知識(shí),將整體架構(gòu)設(shè)計(jì)轉(zhuǎn)化為具體代碼,以函數(shù)分塊實(shí)現(xiàn)具體功能.第六次迭代:與主界面進(jìn)行集成,將融合部分功能與主界面進(jìn)行集成,確定集成接口和參數(shù)類型,修改代碼以實(shí)現(xiàn)各模塊的集成。4.4 修補(bǔ)迭代:修補(bǔ)迭代:第一次迭代:小組內(nèi)部軟件需求分析,軟件功能模塊架構(gòu),研究受損圖像的可靠修補(bǔ)算法,并完成
31、對(duì)修補(bǔ)算法的可行性分析,畫出算法流程圖。并學(xué)習(xí)計(jì)算機(jī)圖形學(xué)和計(jì)算機(jī)圖像學(xué)的相關(guān)技術(shù)和知識(shí)。軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 20 -第二次迭代:根據(jù)算法流程圖,完成對(duì)算法的代碼架構(gòu),完成修補(bǔ)主函數(shù)Repair()代碼和各功能點(diǎn)函數(shù)代碼框架。第三次迭代:對(duì)輪廓函數(shù) Boundary()的代碼編寫,通過獲取上層函數(shù)傳入的待修補(bǔ)圖像指針和 Mask 圖,確定待修補(bǔ)區(qū)域的邊界輪廓線。第四次迭代:計(jì)算優(yōu)先級(jí)函數(shù) Priority()的置信項(xiàng)和數(shù)據(jù)項(xiàng)部分代碼編寫。第五次迭代:完成優(yōu)先級(jí)函數(shù) Priority()剩余部分編寫,并對(duì)修補(bǔ)函數(shù)repairing()搜尋相似樣本塊部分的代碼編寫。第六次迭代:完成修補(bǔ)函數(shù)
32、 Repairing()的剩余部分代碼編寫,并對(duì)更新函數(shù) Update()進(jìn)行代碼編寫,刪除被修補(bǔ)像素并更新 Mask 圖。第七次迭代:修改修補(bǔ)主函數(shù) Repair(),完成對(duì)子函數(shù)的調(diào)用,并對(duì)各函數(shù)進(jìn)行代碼走查,發(fā)現(xiàn)邏輯錯(cuò)誤和語法錯(cuò)誤。與其他小組進(jìn)行集成。第八次迭代:對(duì)集成完畢的軟件進(jìn)行測試,發(fā)現(xiàn)軟件缺陷并對(duì)已知的 Bug進(jìn)行修復(fù)。軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 21 -5 分工情況分工情況黃超趙劍華孫芳芳謝彩燕施盛楠胡華東項(xiàng)目管理100%0%0%0%0%0%需求分析16.5%(分割功能模塊的需求分析)17.5%(界面模塊的需求分析)16.5%(分割功能模塊的需求分析)16.5%(合成功能模塊的
33、需求分析)16%(合成功能模塊的需求分析)17%(修補(bǔ)功能模塊的需求分析)架構(gòu)設(shè)計(jì)16.5%(分割模塊的架構(gòu)設(shè)計(jì)以及接口設(shè)計(jì))17.5%(界面模塊的架構(gòu)設(shè)計(jì)以及接口設(shè)計(jì))16.5%(分割模塊的架構(gòu)設(shè)計(jì)以及接口設(shè)計(jì))16.5%(合成模塊的架構(gòu)設(shè)計(jì)以及接口設(shè)計(jì))16%(合成模塊的架構(gòu)設(shè)計(jì)以及接口設(shè)計(jì))17%(修補(bǔ)模塊的架構(gòu)設(shè)計(jì)以及接口設(shè)計(jì))編碼與測試17.5%(分割模塊的編碼以及測試)17.5%(界面模塊的編碼以及測試)15.5%(分割模塊的編碼以及測試)16.5%(合成模塊的編碼以及測試)15%(合成模塊的編碼以及測試)17.5%(修補(bǔ)模塊的編碼以及測試)文檔編寫24%(項(xiàng)目概述,分工情況以及分
34、割模塊的功能模塊需求,功能模塊架構(gòu),開發(fā)過程的迭代情況,遇到的問題和解決方案,以及文檔總體的整理)25%(項(xiàng)目的頂層架構(gòu)設(shè)計(jì),用戶手冊(cè)以及界面模塊的功能模塊需求,開發(fā)過程的迭代情況,使用手冊(cè),遇到的問題和解決方案)12.5%(分割模塊的功能模塊需求,開發(fā)過程的迭代情況,遇到的問題和解決方案)12.5%(合成模塊的功能模塊架構(gòu),開發(fā)過程的迭代情況,遇到的問題和解決方案)12.5%(合成模塊的功能模塊需求,開發(fā)過程的迭代情況,遇到的問題和解決方案)13.5%(修補(bǔ)模塊的功能模塊需求,功能模塊架構(gòu),開發(fā)過程的迭代情況,使用手冊(cè),遇到的問題和解決方案)軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 22 -6FAQ61
35、環(huán)境配置:環(huán)境配置:1 OpenCV 的安裝以及在 Microsoft Visual Studio.NET 2003 中的配置問題。解決方法:下載 OpenCV 1.0 安裝包,點(diǎn)擊安裝程序進(jìn)行安裝。配置方法:定制全局選項(xiàng)打開 VC+.net 應(yīng)用程序,在菜單項(xiàng)里選擇:Tools-Options 在列表中,選擇 Projects-VC+ Directories 首先,從“Show Directories for”的 list box 中選擇“Library files” 單擊“Insert New”圖標(biāo),定位你安裝 opencv 的文件夾 假設(shè)它安裝于“C:Program FilesOpenC
36、V” 在庫文件列表中,定位并添加: C:Program FilesOpenCVlib圖 25軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 23 -然后在 list box 中選擇 include 文件,定位并添加以下路徑: C:Program FilesOpenCVcvincludeC:Program FilesOpenCVcxcoreincludeC:Program FilesOpenCVotherlibshighguiC:Program FilesOpenCVcvauxincludeC:Program FilesOpenCVotherlibscvcaminclude圖 26接下來,選擇 list box 中
37、的 source 文件,定位并添加一下路徑 C:Program FilesOpenCVcvsrcC:Program FilesOpenCVcxcoresrcC:Program FilesOpenCVcvauxsrcC:Program FilesOpenCVotherlibshighguiC:Program FilesOpenCVotherlibscvcamsrcwindows軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 24 -圖 27單擊選項(xiàng)對(duì)話框的“OK” 現(xiàn)在你就正確配置好了全局設(shè)置。 創(chuàng)建 新的項(xiàng)目在 Developer Studio 中創(chuàng)建新的 application 從菜單中選擇File-New.-
38、Projects 選擇“Win32 Application或者Win32 console application,后者更加容易,示例都采取這種方式 軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 25 -圖 28輸入項(xiàng)目名稱現(xiàn)則位置 單擊 OK,在向?qū)е械闹苯訂螕?finish。 圖 29軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 26 -以上步驟之后 developer studio 將創(chuàng)建一個(gè)項(xiàng)目文件夾(缺省與項(xiàng)目同名)、.vcproj 文件、solution.sln 以及三個(gè)源文件:.cpp、stdafx.cpp 和 stdafx.h。stdafx 文件是預(yù)編譯頭文件,對(duì)于消減編譯時(shí)間很有用處。例如,假設(shè)我們創(chuàng)建了一個(gè)新的
39、叫“hello”的項(xiàng)目。打開 hello.cpp,包含 opencv 相關(guān)的#include 路徑: #include #include #include 然后鍵入一些 OpenCV 的代碼,按 F7 進(jìn)行 Build,會(huì)有些 Link 錯(cuò)誤。添加項(xiàng)目的 depencency 從菜單:“Projcet”-“Properties” 選擇Linktab - Input - Additional Dependencies。添加所有需要的庫 (cxcored.lib cvd.lib highguid.lib cvauxd.lib cvcamd.lib) 軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 27 -圖 30這就
40、可以了,現(xiàn)在用 F5 編譯、運(yùn)行。 圖 31軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 28 -2安裝 opencv 完后的配置問題解決方法:看老師給的安裝文檔解決,原來是沒有把所需的 lib 文件包含進(jìn)來 3安裝 Microsoft Visual Studio 2003 時(shí)出現(xiàn)問題,是計(jì)算機(jī)系統(tǒng)的問題解決方法:在安裝 2003 時(shí)放入老師給的 windows XP 系統(tǒng)安裝盤4編程前提的奠基解決方案:開發(fā)之前必須準(zhǔn)備好編程的開發(fā)環(huán)境。要有開發(fā)軟件以及其他的必要條件。5安裝開發(fā)軟件解決方案:本次開發(fā)使用的是 vs 2003 的軟件版本,在安裝時(shí)需要使用windows XP 的系統(tǒng)環(huán)境支持,對(duì)于其他的環(huán)境支持可
41、能并不是很好。特別對(duì)于w7 之類的較為新穎的操作系統(tǒng)兼容性并不強(qiáng)。因此建議使用 XP 的操作系統(tǒng)進(jìn)行安裝開發(fā)。在安裝 vs 2003 的版本軟件時(shí),注意到可能會(huì)安裝失敗??赡苁钱?dāng)前操作系統(tǒng)缺失了部分系統(tǒng)文件。解決方法可以選擇使用安裝光盤安裝好缺失的部分。在安裝過程中可以自行選擇安裝部分。建議只需安裝需要的部分即可,以免占用較多的硬盤空間造成不便。6OPENCV 的配置問題解決方案:對(duì)于較早版本的 vs c+配置較為方便,但是現(xiàn)在的編程工具不斷進(jìn)步,c+6.0 的配置和 vs 2003 的配置又有所不同。在配置中應(yīng)當(dāng)注意一些問題 ,特別是路徑的正確性,已經(jīng)庫的全部導(dǎo)入,不可缺失。7.開發(fā)環(huán)境的配
42、置問題,我們小組一開始是在 VC2008 下,但是遇到了很多的問題,尤其反復(fù)出現(xiàn)了“MSVCR90D.dll not found”這個(gè)問題。解決方法:方法一:在解決方案配置中使用 release 模式,如果再有錯(cuò)誤就說明你的程序錯(cuò)了,在 realise 模式下,不能方便的調(diào)試。方法二:項(xiàng)目-屬性-配置屬性-連接器-常規(guī) ,把啟用增量連接改為否。8在一開始 OpenCV 安裝后“沒有找到 cxcore100.dll”軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 29 -解決方法:這是因?yàn)樵诎惭b時(shí)選擇”將OpenCVbin 加入系統(tǒng)變量”(AddOpenCVbin to the systerm PATH)。 但該選
43、項(xiàng)并不一定能成功添加到系統(tǒng)變量,如果編寫的程序在運(yùn)行時(shí)出現(xiàn)“沒有找到 cxcore100.dll 說明這個(gè)應(yīng)用程序未啟動(dòng),重新安裝應(yīng)用程序可能會(huì)修復(fù)此問題。主要解決方案: 手動(dòng)在我的電腦-屬性-高級(jí)-環(huán)境變量-系統(tǒng)變量-path 添加 c:program filesopencvbin; 添加完成后需要重啟計(jì)算機(jī)。9在后來改用 VC2005 后也遇到了一個(gè)問題,運(yùn)行程序時(shí)出現(xiàn)“應(yīng)用程序初始化錯(cuò)解決方法:打開 OpenCV 安裝目錄下的_make 文件夾,用 VS2005 打開其中的opencv.sln,進(jìn)行批生成(生成-批生成-僅選擇所有的 debug|win32 和release|win32-
44、生成)10以上生成過程中有時(shí)會(huì)出現(xiàn) “fatal error LNK1181: 無法打開輸入文件“cvauxd.lib”和“error C2039: foreground_regions不是CvFGDStatModel的成員”兩個(gè)錯(cuò)誤解決方法:在解決方案資源管理器中打開 “cvaux-Include-External 的cvaux. h 文件,用查找功能找到上述 foreground_regions 成員,會(huì)發(fā)現(xiàn)此成員已被注釋掉了,只要將其上一行末尾的“/”改為“*/”使該成員可見,再次啟動(dòng)項(xiàng)目,應(yīng)該就可以編譯通過了。11一開始使用 opencv 編程時(shí)由于頭文件忘記添加會(huì)有編譯沒通過,后來就
45、記住了。12調(diào)試時(shí)遇到 fatal error C1010: 在查找預(yù)編譯頭時(shí)遇到意外的文件結(jié)尾。是否忘記了向源中添加“#include stdafx.h”?解決方法:選擇“配置屬性”- “c/c+ ”-預(yù)編譯頭-選擇“不使用預(yù)編譯頭”。開放環(huán)境的配置不正確。解決方法:咨詢正確安裝了軟件的同學(xué),對(duì)比步驟,重新進(jìn)行配置。軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 30 -13代碼編譯時(shí)提示找不到相關(guān)文件的錯(cuò)誤。解決方案:將 OpenCv 安裝路徑下的 dll 文件復(fù)制到系統(tǒng)中。14Vistual studio 2008 運(yùn)行速度太慢。解決方法:改為使用 Vistual studio 2003。15提示 IplI
46、mage 類型未定義,即無法識(shí)別 OpenCv 庫函數(shù)。解決方案:在新建的工程中加入 lib 庫,具體做法是:選擇工程屬性Configuration PropertiesLinker-Input 將需要用到的類庫包含進(jìn)來,如下圖:圖 3262 代碼編寫:代碼編寫:1在項(xiàng)目初始階段,由于閱讀的材料范圍比較廣泛,每個(gè)功能模塊都有涉及到并且各個(gè)功能模塊又有各種算法操作,在沒決定用哪些算法之前,這些閱讀資料都需閱讀,所以有很多具體的算法難以理解解決方法:詢問老師并且通過網(wǎng)絡(luò)對(duì)這些算法進(jìn)行查詢,初步有些了解。2在確定具體用 grabcut 算法后閱讀針對(duì)性的文檔,對(duì)高斯混合模型以及 em算法(求解最大似
47、然函數(shù)極值)的理解過程中遇到問題。解決方法:閱讀圖書館有關(guān)書籍及詢問老師并且通過網(wǎng)絡(luò)查詢,確定建立的高斯模型數(shù)目,用 em 迭代算法求解混合高斯模型。3具體的對(duì) opencv 應(yīng)用通過寫程序練習(xí),其中一個(gè)的要求是創(chuàng)建圖片畫菱形并對(duì)菱形著色,但是不知道如何改變顏色,這必須對(duì)圖像有所了解。解決方法:看 opencv 文檔中的例子及各種函數(shù)的應(yīng)用情況,利用 CvScalar 和Cvget2D,Cvset2D 來設(shè)置圖片像素的顏色。4具體的對(duì) opencv 應(yīng)用通過寫程序練習(xí),其中一個(gè)的要求是創(chuàng)建圖片或者以任意圖像作為背景圖片顯示正弦曲線,可以對(duì)曲線的線寬及顏色進(jìn)行改變,還可以對(duì)其內(nèi)部進(jìn)行著色,曲線的
48、高矮胖瘦都可以改變,有一個(gè)小球沿著曲線進(jìn)軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 31 -行滾動(dòng)。其中在運(yùn)用數(shù)據(jù)結(jié)構(gòu)的時(shí)候遇到問題,宏定義線寬為 thickness 也出錯(cuò),還有在改變線寬時(shí)對(duì)像素的處理我在上下加寬度值,殊不知由于我們的是正弦曲線而并非很正規(guī)的線條,產(chǎn)生的效果并不理想,變成波峰波谷處粗中間細(xì),小球滾動(dòng)部分,不知道用什么函數(shù)。解決方法:數(shù)據(jù)結(jié)構(gòu)部分我是查看以前學(xué)的數(shù)據(jù)結(jié)構(gòu)書籍;由于 thickness 在opencv 中已有,所以將線寬宏定義名改為 thick;線的寬度部分通過在正弦曲線的法線方向加 2/thick 的方法解決;通過查找,小球滾動(dòng)部分用cvCircle()及 cvShowIma
49、ge()方法實(shí)現(xiàn)。5具體編寫切割代碼部分,em 對(duì)各個(gè)參數(shù)的初始化問題及其他編程問題。解決方法:看書、看文檔、上網(wǎng)查資料,老師的指導(dǎo)及組員間的相互討論。6小組成員間需要哪些數(shù)據(jù)傳遞,以及與其他組的接口部分的問題。解決方法:老師的指導(dǎo)及組員間的相互討論7如果打開圖片解決方法:、新建一個(gè)單文檔的應(yīng)用程序,項(xiàng)目名稱為 ShowBitmap、為 CShowBitmapView 類添加下述成員變量和成員函數(shù):/參數(shù)定義public: int state; /位圖顯示狀態(tài) CString BmpName; /保存圖像文件文件名 CString extname; /保存圖像文件擴(kuò)展名 CBitmap m_b
50、itmap; /創(chuàng)建位圖對(duì)象 void ShowBitmap(CString BmpName); /用來顯示指定位圖的函數(shù) BOOL ShowJpgGif(CDC* pDC,CString strPath, int x, int y);、在 CShowBitmap 類的構(gòu)造函數(shù)中,初始化成員變量 state軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 32 -/ CShowBitmapView 構(gòu)造/析構(gòu)CShowBitmapView:CShowBitmapView() state=0;、為 ID_FILE_OPEN 消息添加響應(yīng)函數(shù)(具體怎么加就不細(xì)說了),編寫該函數(shù)/ CShowBitmapView 消息處
51、理程序void CShowBitmapView:OnFileOpen() /CFileDialog dlg(TRUE,_T(BMP),_T(*.BMP),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T(位圖文件(*.BMP;*.jpg)|*.BMP;*.jpg|); /這行代碼可以打開 BMP 格式的圖片 CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T(位圖文件(*.BMP)|*.BMP|jpg 文件(*.jpg)|*.jpg|); /這行代碼可以打開 BMP 和 JP
52、G格式的圖片/gif 格式圖片的打開在這就不列出來了,留給各位自己嘗試吧,對(duì)于 gif 格式圖片的顯示圖片函數(shù)和 jpg 格式圖片是同一個(gè)函數(shù)。 if (IDOK=dlg.DoModal() state=0; BmpName.Format(_T(%s),dlg.GetPathName(); extname = dlg.GetFileExt(); /返回選定文件的擴(kuò)展文件名軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 33 - extname.MakeLower(); if (0=extname.Compare(_T(bmp) ShowBitmap(BmpName); else state=1; Invalida
53、te(); 、編寫 BMP 圖片顯示函數(shù)void CShowBitmapView:ShowBitmap(CString BmpName) if (state=0) HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,BmpName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE); m_bitmap.Detach(); m_bitmap.Attach(hBitmap); state=1; Invalidate(); 、編寫 jpg 或 gif 格式圖片顯示程序軟件工程實(shí)踐項(xiàng)目總結(jié)
54、報(bào)告- 34 -BOOL CShowBitmapView:ShowJpgGif(CDC* pDC,CString strPath, int x, int y) IStream *pStm; CFileStatus fstatus; CFile file; LONG cb; /打開文件并檢測文件的有效性 if (file.Open(strPath,CFile:modeRead)& file.GetStatus(strPath,fstatus)& (cb = fstatus.m_size) != -1) HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb
55、); LPVOID pvData = NULL; if (hGlobal != NULL) pvData = GlobalLock(hGlobal); if (pvData != NULL) /file.ReadHuge(pvData, cb); /6.0 中可能是用這個(gè)函數(shù) file.Read(pvData, cb); /VC2005.NET 中用這個(gè)函數(shù) GlobalUnlock(hGlobal); CreateStreamOnHGlobal(hGlobal, TRUE, &pStm); 軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 35 - else return false; /打開文件結(jié)束 /顯示 J
56、PEG 和 GIF 格式的圖片,GIF 只能顯示一幀,還不能顯示動(dòng)畫, /要顯示動(dòng)畫 GIF 請(qǐng)使用 ACTIVE 控件。 IPicture *pPic; /load image from file stream if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic) OLE_XSIZE_HIMETRIC hmWidth; OLE_YSIZE_HIMETRIC hmHeight; pPic-get_Width(&hmWidth); pPic-get_Height(&hmHeight);
57、double fX,fY; /get image height and width fX = (double)pDC-軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 36 -GetDeviceCaps(HORZRES)*(double)hmWidth/(double)pDC-GetDeviceCaps(HORZSIZE)*100.0); fY = (double)pDC-GetDeviceCaps(VERTRES)*(double)hmHeight/(double)pDC-GetDeviceCaps(VERTSIZE)*100.0); /use render function display image if(F
58、AILED(pPic-Render(*pDC,x,y,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL) pPic-Release(); return false; pPic-Release(); else return false; return true;、修改 OnDraw 函數(shù),實(shí)現(xiàn)圖片的顯示 / CShowBitmapView 繪制void CShowBitmapView:OnDraw(CDC* pDC)軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 37 - CShowBitmapDoc* pDoc = GetDocument(); ASSER
59、T_VALID(pDoc); if (!pDoc) return; if (state=1) if (0 = extname.Compare(_T(bmp) CDC dcImage; if (!dcImage.CreateCompatibleDC(pDC) return; BITMAP bm; m_bitmap.GetBitmap(&bm); dcImage.SelectObject(&m_bitmap); pDC-BitBlt(0,0,bm.bmWidth,bm.bmHeight,&dcImage,0,0,SRCCOPY); else if (0 = extname.Compare(_T(j
60、pg) ShowJpgGif(pDC,BmpName,1,1); 軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 38 -8滾動(dòng)條實(shí)現(xiàn)解決方法:、建立工程時(shí),將 View 類繼承自 CScrollView 、在 OnInitialUpdate 中添加初始化時(shí) Scroll 的相關(guān)屬性值 CSize sizeTotal(0,0); SetScrollSizes(MM_TEXT,sizeTotal); 、打開文件 ( 圖像后 ) 根據(jù)圖像的大小,設(shè)置滾動(dòng)屬性值 ChangeScrollRange(); / 自定義函數(shù) 、在 View 類中添加成員變量。 作用是存儲(chǔ)圖像顯示位置與原點(diǎn)的 offset int m_Img
61、VScrollPos ;/ VScroll distance int m_ImgHScrollPos ;/ HScroll distance 、滾動(dòng)處理 添加自定義響應(yīng) WM_VSCROLL 、 WM_HSCROLL 消息的事件函數(shù): OnVScroll 、 OnHScroll void CSockIIView : OnVScroll ( UINT nSBCode , UINT nPos , CScrollBar * pScrollBar ) / TODO: Add your message handler code here and/or call default SCROLLINFO si
62、 ; GetScrollInfo ( SB_VERT ,& si , SIF_ALL ); m_ImgVScrollPos = si . nPos ; Invalidate ( TRUE ); CScrollView : OnVScroll ( nSBCode , nPos , pScrollBar ); 、圖像顯示 軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 39 -更改 OnPaint 函數(shù)中圖像顯示的代碼: dc . BitBlt ( rc . left , rc . top , rc . Width (), rc . Height (), m_pMemDC , rc . left , rc . top
63、 , SRCCOPY ); 為: dc.BitBlt(rc.left,rc.top,rc.Width(),rc.Height(),m_pMemDC,(rc.left+m_ImgHScrollPos),(rc.top+m_ImgVScrollPos),SRCCOPY);9在項(xiàng)目開始初期,由于本項(xiàng)目主要利用 OpenCV 的類庫來對(duì)數(shù)字圖像進(jìn)行處理,但 OpenCV 的相關(guān)知識(shí)是之前從未涉及到過的,所以不知道項(xiàng)目該從何入手。解決方法:由指導(dǎo)老師根據(jù)項(xiàng)目的功能來進(jìn)行認(rèn)為模塊的分類,以及要求我們對(duì)相關(guān)知識(shí)的學(xué)習(xí)。同時(shí)自身加強(qiáng)了對(duì)相關(guān)方面的程序練習(xí)。10在進(jìn)行用運(yùn) OpenCV 進(jìn)行程序練習(xí)時(shí),不清楚如
64、何對(duì)圖像信息進(jìn)行處理。解決方法:借閱數(shù)字圖像處理方面的書籍以及在網(wǎng)上查找資料。11在圖像中繪制正弦曲線,改變線寬使線寬在各處相等。解決方法:求曲線各個(gè)點(diǎn)的斜率,然后求出垂直方向上的斜率,根據(jù)垂直方向修改線寬信息。12在正弦曲線上實(shí)現(xiàn)小球滾動(dòng)。解決方法:使用 cvCircle()方法在圖像上曲線上畫一個(gè)圓,然后使用cvShowImage()方法對(duì)圖像進(jìn)行顯示,再重新載入原圖像取曲線上的下一個(gè)點(diǎn)繪制圓,如此循環(huán)。13在對(duì)圖像采樣信息進(jìn)行聚類時(shí),由于要使用到 OpenCV 中的 cvKMean2()方法,在對(duì)其參數(shù)進(jìn)行初始化時(shí),錯(cuò)誤的把該賦為空值的矩陣也賦了值。解決方法:主要是理解了參數(shù)的意義后,對(duì)
65、參數(shù)進(jìn)行了重新初始化。14創(chuàng)建一幅圖像,如何改變圖像的顏色值。解決方法:創(chuàng)建一個(gè)指向圖像顏色信息的指針,對(duì)指針的值進(jìn)行操作改變指向的顏色信息,對(duì)顏色信息進(jìn)行賦值。15也是關(guān)于矩陣方面的問題,由于對(duì) OpenCV 中的矩陣結(jié)構(gòu)理解的不夠透徹,無法正確的對(duì)矩陣中的元素進(jìn)行正確賦值,以及在創(chuàng)建矩陣時(shí)初始化信息不正確。軟件工程實(shí)踐項(xiàng)目總結(jié)報(bào)告- 40 -解決方法:在指導(dǎo)老師的指導(dǎo)下,正確的認(rèn)識(shí)了矩陣的結(jié)構(gòu),然后正確的進(jìn)行了初始化、賦值。16在對(duì)圖像信息進(jìn)行處理時(shí)總是存在越界問題。解決方法:對(duì)圖像的邊界進(jìn)行判斷,在對(duì)圖像像素進(jìn)行處理時(shí)對(duì)像素進(jìn)行邊界判斷。17在測試聚類結(jié)果的正確性時(shí),使用的方法是使用 c
66、vCircle()方法對(duì)聚類結(jié)果進(jìn)行輸出。在提取像素坐標(biāo)信息時(shí)產(chǎn)生了錯(cuò)誤。解決方法:首先是對(duì)程序進(jìn)行調(diào)試,檢查產(chǎn)生錯(cuò)誤的原因,然后對(duì)錯(cuò)誤原因進(jìn)行思考,查閱相關(guān)方面的資料。18在項(xiàng)目進(jìn)行至一半時(shí)發(fā)現(xiàn)對(duì)分割功能的實(shí)現(xiàn)思想 grabcut 理解產(chǎn)生了偏差。 解決方法:重新仔細(xì)理解 grabcut 的實(shí)現(xiàn)步驟,重新編寫技術(shù)文檔。19由于各個(gè)功能模塊由不同的小組負(fù)責(zé),各個(gè)小組的進(jìn)度不一致,界面實(shí)現(xiàn)后不能進(jìn)行集成。解決方法:加快落后小組的進(jìn)度,同時(shí)界面將與各功能的接口進(jìn)行設(shè)計(jì)。20每次進(jìn)行項(xiàng)目評(píng)審時(shí),由于本項(xiàng)目并不是基于網(wǎng)頁開發(fā)的,無法將完成的工作以可視化的方法展示出來,導(dǎo)致評(píng)分比較低。解決方法:加快項(xiàng)目進(jìn)度,同時(shí)采用圖片的方法進(jìn)行成功展示。21本項(xiàng)目由 6 個(gè)人組成,其中又分為 4 各小組,大部分小組是男男組合或女女組合,但存在個(gè)別小組是男女組合,相互之間進(jìn)行溝通比較少,導(dǎo)致項(xiàng)目進(jìn)度緩慢。解決方法:將強(qiáng)小組成員之間的溝通,加快項(xiàng)目進(jìn)度。22打開一幅圖像對(duì)圖像部分像素的 RGB 值改變,對(duì)修改后的圖片進(jìn)行保存。重新載入該圖,以不同的指針對(duì)圖像信息進(jìn)行修改,修改后的圖片保存后仍留有上一次對(duì)圖像進(jìn)行處
- 溫馨提示:
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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 蘇教版五上《小數(shù)乘整數(shù)》ppt課件
- 蘇教版一年級(jí)數(shù)學(xué)上冊(cè)《數(shù)一數(shù)》ppt課件
- 江南1優(yōu)秀課件
- 提高印字質(zhì)量課件
- 服務(wù)分銷策略課件
- 數(shù)學(xué)必修蘇教版互斥事件課件3(共32張PPT)
- 第三章要素費(fèi)用的核算PPT優(yōu)秀資料
- 元素的質(zhì)量分?jǐn)?shù)計(jì)算答案
- 圖形的欣賞與設(shè)計(jì)
- 八年級(jí)下期Uuit10SectionA課件
- 部編七年級(jí)語文下冊(cè)4孫權(quán)勸學(xué)課件
- 部編一年級(jí)語文下冊(cè)端午粽課件
- 超市防損的技能課件
- 表彰班會(huì)教學(xué)課件教學(xué)課件
- 第17講中考數(shù)學(xué)專題復(fù)習(xí) 函數(shù)的綜合應(yīng)用中考數(shù)學(xué)專題復(fù)習(xí)課件課件各版通用