inpainting小工具的debug過程

2021-06-27 04:18:46 字數 3753 閱讀 2080

實現想要的功能是一回事,除錯過程中想到新的功能,遇到新的exception,等等,我都把它們放在這裡總結一下吧

1. 如果 影象顯示塊在沒有新增影象時預設顯示一些文字,應該可讀性更強吧,所以textitem可以實現預設文字的顯示

qgraphicstextitem*background_image=new

qgraphicstextitem;

background_image->setplaintext("original

image

space");

originalscene->additem(background_image);

ui->originalview->show();

2. 最開始程式設計的時候其實就應該考慮之後的移植問題,但我經驗不足,最開始的程式中讀寫檔案的位置都指定在了電腦的其他位置,換個電腦就找不到讀寫位置了,所以 

dir_base=qdir::currentpath();
dir_imagedatabase=dir_base+"\\inpainting\\image_database\\";
dir_maskdatabase=dir_base+"\\inpainting\\mask_database\\";
dir_result=dir_base+"\\inpainting\\result\\";
qdir::currentpath()可以獲得當前exe檔案所在的位址,以此為基準存放讀檔案,和確定寫檔案的位置 

3. 檔案的命名是另乙個沒有實現考慮的問題,我按照預設的檔案命名格式,數出檔名本身的位置,擷取string的對應位數的方法獲取單純檔名;但是如果程式開啟了不符合命名規律的檔案,則出現錯誤,所以

dir_result為前面提到的路徑,qfileinfo中的basename函式可以直接得到單純的檔名 

4. 元件屬性中更多有用選項,palette可以設定背景顏色,font可以改變字型格式,windowtitle則修改視窗標題顯示的內容等

5. 在操作過程中還出現了明明在檢視窗中修改了布局樣式,但執行中卻沒有改變。原因是mianwindow.ui檔案編譯都對應的ui_mainwindow.h應該只存在編譯執行生成的資料夾中,而不存在於其他.cpp檔案所在的工程目錄中,但當時我的情況是ui_mainwindow.h有兩個,乙個在工程目錄中,乙個在執行目錄中,工程目錄中的檔案始終不變,對應的結果也不變。直接將工程目錄中的檔案用最新的問題替換可以解決問題,但問題是它根本不應該存在啊,直接刪除又會出現dependence錯誤,反覆clear,rebuild,qmake,關掉重開,幾次重複之後解決問題。

注意正常情況是ui_mainwindow.h不應該存在於工程目錄中,它是程式自動生成並不斷更新的。

6. 影象區開啟一次超大影象後,clear,update之後雖然顯示區是空的,但是scene的大小狀態仍保持原狀,之後開啟小檔案時仍那麼大,會出現不匹配的問題

originalscene->clear();
ui->originalview->update();
所以,應該更徹底的毀掉已經生成的scene,重新生成新的scene

delete

originalscene;

originalscene

=new

qgraphicsscene(this);

ui->originalview->setscene(originalscene);

ui->originalview->update();

當然delete之前要先判斷是否真的有這個東西 

7. 滑鼠運動那塊問題更多,包括滑鼠是不是跑出了影象區域,滑鼠是不是在外面點了然後拖進區域釋放的等等,要求在相應的函式中比較滑鼠位置與影象資訊關係,並適當的賦值參量,比如滑鼠中間跑到了外面的區域,則相當於從邊界開始,等等。

if(this->x

<0)

if(this->y

<0)

if(this->x

>

this->scene()->width())

if(this->y

>

this->scene()->height())

if((ui->resultview_proposed_user->line_x

<0||ui->resultview_proposed_user->line_y

<0||(ui->resultview_proposed_user->line_x

>

pix_user->width())||(ui->resultview_proposed_user->line_y

>

pix_user->height())))

8. 最開始只考慮了生成乙個inpaint動作的情況,之後補充了在inpainted基礎上再inpaint的情況,需要補充的**就是在點inpaint按鈕時,img不呼叫最開始的img而是直接採用現有的img,這樣則要求新影象開啟時,相關的mat都要清除並重新複製。同樣顯示步驟時這些中間步驟也要記錄。需要想清楚那個mat需要在**清除,重新賦值,等等,我這人腦子容易亂,中間亂了好多次

if((ui->resultview_proposed_user->line_x

<0||ui->resultview_proposed_user->line_y

<0||(ui->resultview_proposed_user->line_x

>

pix_user->width())||(ui->resultview_proposed_user->line_y

>

pix_user->height())))

9. 還有就是直接按inpaint可以在之前結果的基礎上繼續inpaint,那麼也需要重新開始inpaint的過程,所以新添了reset inpaint過程的按鈕。其他還有顯示步驟時提示顯示到最後一步的訊息框。

10. 其他的大大小小不記得了,總結起來就是腦子不能亂,改或加東西都要一步一步來,起名字一定要寫清楚給自己留後路。

11. 目前應該差不多了,遺憾就是介面沒有做的更炫,與其他演算法的比較要不要加,然後類似標籤的點那個按鈕顯示哪個結果的功能一直在糾結要不要加,還有就是在影象顯示區域的滑鼠滑動控制放大縮小的功能,實現起來好像也有困難。

時間已經過去一周多了,還有其他的東西要準備,現在就放在這樣吧。也許以後會有一天重新完善它吧,就像暑假的時候我第一次做這個東西,完全沒有目的,卻變成了為這次的demo打下了很好的基礎~~

不管怎樣,第一次做了個影象介面出來,很粗糙的小軟體,360還老說它是病毒(我要是會編病毒該牛氣起來了),心情不錯~~

明天就是大週末,實驗室集體出遊,但願玩的愉快~~over~~

小工具 tree工具

wangyetao linux u1604 tree l 1 bin boot cdrom dev etc home initrd.img boot initrd.img 4.4.0 116 generic initrd.img.old boot initrd.img 4.4.0 112 gener...

幾個小工具

1 svn 輕量級的版本控制 2 incredibuild 分布式的編譯工具,對於大專案編譯很有好處,在團隊每個成員的機器上安裝一人,能極大的提高 編譯效率 3 dbg 中文幫助文件 http www.dbgtech.net windbghelp index.html 4 visualassit x...

天氣小工具

昨天我們得到了全國的省份,市,區的 資訊。我們就應該讓使用者能選擇。img img img 通過使用jcombobox我們可以顯示出選項,並且在使用者作出乙個當前選擇時,影響下乙個選擇!方便起見,我們初始選擇都是空,每當使用者選擇了省份,就跟根據選擇省份改變市和區。以省份的jcombobox為例 其...