Re: [問題] 抽OpenCV裡需要的code

看板C_and_CPP (C/C++)作者 (I'm...)時間16年前 (2009/08/01 14:23), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串7/8 (看更多)
※ 引述《pizza0117 (阿水~*)》之銘言: : ※ 引述《neutronstars (I'm...)》之銘言: : : 如同我前面說的,OpenCV內提供的cvHaarDetectObjects, : : 它的內容包含其他基礎結構,所以一個包一個, : : 如果真的要單獨抽出cvHaarDetectObjects function, : : 那你應該會把很多部份的code都抓出來(或是你自己修改)。 : : 如果真的要抓出來用,那你可以把某些部份去掉。 : : --------------------------------------- : : /* 這段都不用 */ : : if( flags & CV_HAAR_SCALE_IMAGE ) : : { : : /* code */ : : } : : /* 下面這段需要留下來 */ : : else : : { : : } : : /* call cvHaarDetectObjects時,記得不要給CV_HAAR_SCALE_IMAGE flag. */ : 我不記得我的範例裡面有沒有這段,我回去再找找看 : 我是使用安裝完之後直接將opencv/sample/facedetect.c裡面的code改寫到我的程式裡 : 並include需要的.h 還有setting那邊增加.lib 我這邊指的是OpenCV的source code, 你可以再cv/src/cvhaar.cpp裡面找到這個function。 實際上他整個haar object detection的演算法實作都是在cvhaar.cpp內。 : : --------------------------------------- : : 當然,裡面還包含 : : cvCreateMat : : cvCreateSeq : : cvRunHaarClassifierCascade : : cvSetImagesForHaarClassifierCascade : : icvEvalHidHaarClassifier : : ...... : : 等function,其中可能還有某些特別的資料結構,你也需要自己重新build, : : 不然就是去找他們被實作的部份,然後把他們一起抓過來用。 : : 這部份你就可以參考前面大大提到的doxygen,幫助你找到相關的header file或.cpp檔。 : : 另外,OpenCV的使用方式,我想如果你有辦法把這些code抓出來成功獨立運作, : : 那參考下面網址的sample code後,你一定很快就會知道如何使用OpenCV了。 : : http://www.opencv.org.cn/index.php : 可以使用~(也是參考這個網站) : 接下來要把function一個個抽出來 : 在這之前我現在就像您說的 : 正在刪除不必要的code,許多變數的驗證我就刪除了(我想它是怕使用者操作錯誤) ^^^^^^^^^^^          沒錯!初期對你來說,這些驗證應該不太需要。 : 現在只剩下幾行關鍵的 : 1.使用cvCreatImage開圖 : 2.使用cv產生一個window : 3.我要的核心cvHaarDetectObjects : 1,2 我想替換掉,但不知道怎麼處理 : 1. : 我現在是用CxImage做開圖的動作 : 我覺得我只需要將我開完的圖,轉換成IplImage的格式儲存 : 然後再送入cvHaarDetectObjects運算即可,不必花時間去修改cvCreatImage的部份 typedef struct _IplImage { int nSize; // V int ID; int nChannels; // V int alphaChannel; int depth; // V char colorModel[4]; char channelSeq[4]; int dataOrder; int origin; // V int align; int width; // V int height;  // V struct _IplROI *roi; struct _IplImage *maskROI; void *imageId; struct _IplTileInfo *tileInfo; int imageSize; // V char *imageData; // V int widthStep; // V int BorderMode[4]; int BorderConst[4]; char *imageDataOrigin; } IplImage; 以上在欄位後面有註解V的,都是你需要自行轉換填上的,相關意義就請參考manual。 我所提到的部份只是就我知道,需要自行填上的部份,也許有我不知道的部份, 但是必須被填上,那就等你試過後,應該就知道了。 : 2.opencv的結果通常都是秀在一個他自己另外開的視窗裡面 : 我想,產生一個新的視窗... : 這部份如果copy過來會產生很多麻煩(老實說我只會影像處理不會視窗程式...) 在linux下,OpenCV的視窗程式底層是用GTK去做的,至於在windows下我就不熟了。 這邊或許可以用個比較陽春的作法,先將結果存成圖片, 你只要去開那個圖片,持續做更新,這樣就可以看到動態的結果。 至於效率量測,計算function運作的時間就可以了。 : 我的程式裡面就有一個現成的view了,我想要讓結果放在這個view就好 : 核心的部份就保留,以及其內部的函式跟結構 : 刪掉不必要的部份之後,缺什麼補什麼 : : ------------------------- : : 題外話,既然你們有自己的adaboost code,是不是就tune看看, : : 或許可以藉由了解OpenCV的實作細節後, : : 你們會發現自己的code哪邊可以再最佳化,這樣或許是較好的作法。 : 你說的對! : 其實我對adaboost的演算法,只能說似懂非懂 : 只是看過資料上過課,沒有實際寫過(手邊是學長寫的) : 有人推薦我侯捷的那篇文章,裡面就有人問 : "如果我對我要深入剖析的演算法不熟析,是否會很困難?" : 呵呵,跟我狀況類似 : 所以我也有心理準備了 : 您說的方向(參考->最佳化)我很認同,我會去嘗試 除非你們原始的code寫得不是很好,不然「試著最佳化」通常是較有效率的作法。 : : ------------------------ : : 坦白說,我也曾經想過要把它的code抽出來, : : 不過trace完他的source code之後...... : : 我還是決定改它的code就好了。 : : 或許有高手做過這件事吧,但就我來說,看完那些code之後, : : 在時間允許的情況下,我會選擇照它的程式邏輯重寫。 : 你說的"改它的code"的意思我不太了解 : 假如你要做的是灰階,(我忘記是cvCvtImage 還是cvCvtColor) : 這個函式裡面有許多選項,我知道有Ostu其他我猜是Moment ISOdata Entrpy(亂拼..嫡) : 但是你想要新增一個最近看paper看到的方法到這個函式裡頭 : 你是指說copy他的function並另外產生一個名字 然後修改內容 : 還是說 直接就去動他的source code? 我指的「改code」,就是去修改OpenCV的source code, 然後再跟著OpenCV一起編譯出來,等於你幫OpenCV加功能。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.124.182.85

08/01 16:10, , 1F
了解 感謝 那我就朝這方向繼續前進了~
08/01 16:10, 1F
文章代碼(AID): #1ASzzvjZ (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1ASzzvjZ (C_and_CPP)