Re: [問題] 抽OpenCV裡需要的code
看板C_and_CPP (C/C++)作者neutronstars (I'm...)時間16年前 (2009/08/01 14:23)推噓1(1推 0噓 0→)留言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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 7 之 8 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章