pupuliao的部落格

寫教學的最大目的是教會未來的自己

Get Adobe Flash player

openCV 記憶體釋放要注意

引用自http://blog.csdn.net/xiaowei_cqu/article/details/7586847

 

1、內存洩露

內存洩露是說沒有釋放已經不能使用的內存,這裡一般指堆的內存才需要顯示的釋放。比如用malloc,calloc,realloc,new分配的 內存是在堆上的,需要用free,delete顯示的回收。內存洩露最明顯的一是程序很慢,在運行程序時你可以啟動任務管理器,會看到程序佔用的內存一直 「砰砰砰」的往上漲:

最後直接崩潰,或者你關閉程序的時候也會異常退出,出現

Debug Assertion Failed!
Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

之類的問題。

除了new的對象我們知道要delete。OpenCV中使用cvCreateImage()新建一個IplImage*,以及使用cvCreateMat()新建一個CvMat*,都需要cvReleaseImage()  cvReleaseMat()顯示的釋放

 

  1. IplImage* subImg=cvCreateImage( cvSize((img->width)*scale,(img->height)*scale), 8, 3 );  
  2. CvMat *tempMat=cvCreateMat((img->width)*scale,(maxFace->height)*scale,CV_MAKETYPE(image->depth,image->nChannels));  
  3. cvReleaseImage(&subImg);  
  4. cvReleaseMat(&tempMat);  

另外一些函數要用到 CvSeq*來存放結果(通常這些都要用cvCreateMemStorage()事先分配一塊內存CvMemStorage*),都要是釋放掉相應的內存,這是很難找的。

 

比如從二值圖像中尋找輪廓的函數cvFindContours():

 

  1. CvMemStorage* m_storage=cvCreateMemStorage(0);  
  2. CvSeq * m_contour=0;  
  3. cvFindContours( img, m_storage, &m_contour, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));  
  4. //釋放內存  
  5. cvReleaseMemStorage(&m_storage);  

以及人臉識別中檢測人臉的函數:

 

 

  1. CvMemStorage* m_storage=cvCreateMemStorage(0);  
  2. CvHaarClassifierCascade* cascade = (CvHaarClassifierCascade*)cvLoad( cascade_name, 0, 0, 0 );  
  3. CvSeq* faces = cvHaarDetectObjects( img, cascade, m_storage,1.1, 2, 0,cvSize(30, 30) );  
  4. //釋放內存  
  5. cvReleaseMemStorage( &faces->storage);  
  6. cvReleaseHaarClassifierCascade( &cascade );  

注意這裡我們可以使用
cvReleaseMemStorage( &faces->storage);
來釋放m_storate,也可以使用:
cvReleaseMemStorage(&m_storage);
釋放內存,這是等效的,但一定不要用兩次!!

 

2、一塊內存多次釋放

對應沒有釋放內存,對應就是一個內存釋放多次,如同上面的 cvReleaseMemStorage用了兩次。可能報錯的地方:

 

  1. __declspec(noinline)  
  2. void __cdecl _CRT_DEBUGGER_HOOK(int _Reserved)  
  3. {  
  4.     /* assign 0 to _debugger_hook_dummy so that the function is not folded in retail */  
  5.     (_Reserved);  
  6.     _debugger_hook_dummy = 0;  
  7. }  

或者: Unhandled exception at XXXXXXXXXX in XXX.exe: XXXXXXXXXXX: 堆已損壞。 

 

除了上述的MemStorge問題,使用cvQueryFrame()取出CvCapture*每幀圖像,只需在最後釋放CvCapture*,不需要釋放IplImage*

 

  1. CvCapture* pCapture = cvCreateCameraCapture(-1);  
  2. IplImage* pFrame=cvQueryFrame( pCapture );  
  3. cvReleaseCapture(&pCapture);  

*這篇是以前寫的,其實還是建議大家用C++接口的OpenCV,內存問題很少了~

Post to Twitter Post to Plurk Post to Facebook Send Gmail

在Ubuntu server版上安裝Dropbox

手上剛好有一台server

而為了方便資料輩份,所以我決定透過 dropbox 的同步功能來做(之後可以透過腳本來做定期備份)

因為server本身沒有視窗化介面所以不能用平常的安裝方式

 

網路上應該應該已經有不少方法了,這是經過我實驗後比較快的方法

廢話不多說,進入主題

 

作業系統 Ubuntu 12.04

請用遠端登入控制,因為其中有一個步驟 要用瀏覽器

 

下載dropbox.py

#wget http://www.dropbox.com/download?dl=packages/dropbox.py

下載好後因為檔名問題 要改一下檔名

#cp download?dl=packages%2Fdropbox.py dropbox.py

#rm download?dl=packages%2Fdropbox.py

 

為了日後方便放到/bin 底下

#cp dropbox.py /bin

 

這樣我們就可以使用dropbox 相關指令

可以用

#dropbox.py help 看到有哪些指令可用

 

第一次使用 開始安裝了

在這裡先確定 你用哪個使用者,dropbox 資料夾會自動放到/home/使用者/Dropbox,所以不建議使用root

 

開始安裝

#dropbox start -i

之後就會開始下載了,而且過程式中文的

 

最後會跳出 Please visit https://www.dropbox.com/cli_link?host_id=xxxxxxxxxxxxxxxxx&cl=en_US to link this machine.

複製個連結到流覽器打開他,然後輸入密碼,這樣就OK了

#dropbox.py status

確認現在狀態

如果還沒開起就

#dropbox.py start

 

 

這樣就完成了

 

 

 

Post to Twitter Post to Plurk Post to Facebook Send Gmail

手機的通訊系統其實是一個影星和音樂家發明的

 

科技史上最美的女人 手機用戶都應感謝她

海蒂

  

福布斯旗下的《美國發明與科技遺產》雜誌曾經以海蒂為封面,這大概是該雜誌有史以來最美麗的封面了。

   想當初,中文互聯網紅人「145」創造過一句名言:比我聰明的都沒我漂亮,比我漂亮的都沒我聰明。說這句話的人大概不知道下面我們要介紹的這一位:她演 繹了世界上首部「露點」電影、經歷了6次婚姻、還兩次因在商店順手牽羊而入獄,更重要的是,她還能在60多年前提出「跳頻」技術和一系列無線信號技術的全 新概念,其中「跳頻」技術更為當下大熱的3G移動通信技術奠定了基礎。

  她是海蒂·拉瑪(Hedy Lamarr),是出身顯赫的、與各國軍方高層私交甚好的好萊塢巨星,是全世界最美麗的女人,費雯麗也因長得像她而倍感自豪。

  1 手機用戶都該感謝她

   二戰初期,借助強大的U型潛艇,德國人在北大西洋優勢明顯。為了加強這一優勢,他們開始嘗試利用無線電波來無線遙控魚雷的控制系統。這種技術,後來被移 用到無線通訊方面,並和一種被稱之為CDMA的技術交織在一起,無論是WCDMA、CDMA2000、抑或是TDSCDMA。藉著手握CDMA的專利,這 家財富500強的公司依舊保持著每年兩位數的增長,並成為未來20億3G用戶的收稅官。

  就在高通因CDMA專利坐在家裡數錢的時 候,CDMA皇冠上的寶石———擴頻理論的核心基礎卻躺在專利號「2,292,387」的「保密通信系統」文件裡,申請時間是1941年6月10日。直到 1997年,美國電子前沿基金會授予了這項專利第一申請人海蒂·拉瑪(Hedy Lamarr)榮譽技術獎章時,她才真正進入我們的視線。

   在此之前,海蒂是「好萊塢花瓶」的象徵。因為被認為是花瓶,多數人忽略了她的聰明才智。「她有一個非常驚人的專利,人們通常都想不到電影明星有什麼頭 腦,但她確實有。」高通公司聯合創始人安東尼奧(Antonio Franklin)說。1997年,以CDMA為基礎的3G技術開始走入人們視野,科學 界才想起了這位已經83歲高齡的「擴頻之母」。

  隨後,非盈利性、非官方的電子前沿基金會授予海蒂小姐榮譽技術獎章,將她從塵封的檔案 中請出來。但此時,她的專利已經失效,終身未能因此而得利。就像她的兒子、美國電話局主席羅德(Anthony Loder)對她的評價所說:「雖然她已 經被大家遺忘了,但她所做出的一切仍然影響著一代又一代的人。」全球電信和通訊技術行業著名工程師和分析師莫克(Dave Mock)則在2005年出版 的傳記《高通方程式》中,以這樣的文字來描述這個矛盾的天才人物:「只要你使用過移動電話,你就有必要瞭解並感謝她。要知道,這位性感女明星為全球無線通 訊技術所做出的貢獻至今無人能及。」

繼續閱讀

Post to Twitter Post to Plurk Post to Facebook Send Gmail

openCV K-means的用法

最近為了去雜訊,測視使用了 k-means的方法減少,效果不錯,有效解決因為少數雜訊影響重心位置

參考資料

http://forum.gamer.com.tw/C.php?bsn=60292&snA=1518

http://www.aishack.in/2010/08/k-means-clustering-in-opencv/

http://rritw.com/a/bianchengyuyan/C__/20121123/258942.html

 

這三篇教學文當中,我使用第一篇的範力十分簡單好懂

第二篇視所有參數的英文說明

第三篇是中文說明

 

本文教學開始

 

    Mat model(Data.size(),2, CV_32F );//sample

//建立一個矩陣 每一筆資料 一個row,cow代表維度,這次我是算點作標 所以是二維

    vector<Point *>::iterator tempPoint; //事先算好的點陣列
    int i=0;

//把資料塞入矩陣中
    for(tempPoint=Data.begin();tempPoint!=Data.end();tempPoint++,i++)
    {
        model.at<float>(i,0)=(*tempPoint)->x;
        model.at<float>(i,1)=(*tempPoint)->y;
    }
    
    int k=2; //要分幾群
    Mat cluster; //會跑出結果,紀錄每個row 最後是分配到哪一個cluster
    int attempts = 2;//應該是執行次數
    Mat centers; //記錄那個cluster的值
    //使用k means分群
    kmeans(model, k, cluster,TermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS, 10, 1), attempts,KMEANS_PP_CENTERS,centers );

    //,TermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS, 10, 1),  這裡有三個參數,決定k-means何時結束,第二個參數是指迭代最大次數,第三個參數是精確度多少,第一個參數是指依照前兩個參數的哪一個為準,以範例中就是兩者都參照,以 or 的方式決定

 

 

//以下是因為我指是用這方法去雜訊,所以要找出最多點的地方
    int countMAX=0;
    int MAXIndex;
    int *tempSum =new int[k];
    memset(tempSum,0,sizeof(int)*k);
    for(int i=0;i<Data.size();i++)
    {
        tempSum[cluster.at(i,0)]++;
        if(tempSum[cluster.at(i,0)]>countMAX)
        {
            countMAX=tempSum[cluster.at(i,0)];
            MAXIndex=cluster.at<int>(i,0);
        }
    }
    Point result(centers.at<float>(MAXIndex, 0),centers.at<float>(MAXIndex, 1));

 

 

Post to Twitter Post to Plurk Post to Facebook Send Gmail

創世中文往台灣充值經驗談

最近終於開始邁向從看盜版網站轉向正版網站(其實是懶得找)

 

對岸的 金錢儲值 對台灣來說很不方便,因為他們用的交易系統和我們完全不同

首先幾乎通行全世界的 VISA信用卡 無法在 這種數位商品上刷卡(不給過阿)

 

首先先講 創世的 交易方式

在網站方提供的眾多儲值方是中,現在大概只有{支付寶} 可以用,支付寶如果是在掏寶網上,是可以接受使用 VISA 刷卡,就是透過支付寶中轉

但是在線上虛擬商品上就沒辦法了,我現在使用的方法是找台灣代儲公司幫忙

我是使用  百購站http://www.buygo.tw/faq.aspx  幫忙,沒辦法的在手續費跟匯率上 都要給人賺….

 

 

Post to Twitter Post to Plurk Post to Facebook Send Gmail

FreeBSD忘記密碼解決方法

有些時候,會剛好接手道 資料不全的server,就有機會碰到 帳號密碼消失

最近剛好碰到,找了一下方法 記錄下來

資料來源:http://www.hkcode.com/linux-bsd-notes/399

 

1. 重新開啟 FreeBSD 主機。

2. 在 "Welcome to FreeBSD!" 開啟選單中按 "4" 選擇 "Boot FreeBSD in single user mode"。

3. 然後會看到 "When prompted Enter full pathname of shell or RETURN for /bin/sh:",直接按 Enter。

4. 這時便會直接進入 single user mode,輸入以下指令重新掛載根目錄 "/" 為可讀寫:

# mount -u /
# mount -a

5. 用 passwd 重新設定 root 密碼:

# passwd

6. 最後重新啟動即可:

# reboot

 

 

如果mount 出現問題

請先執行fsck -y

Post to Twitter Post to Plurk Post to Facebook Send Gmail

yahoo 部落格轉wordpress 教學

參考資料

㊣硬闖WP-5:如何從「無名小站」部落格搬家、轉換到WordPress?

㊣硬闖WP-6:如何將「無名小站」的相簿圖片搬家、備份到免費圖床空間?

 

如果單純 無名轉 wordpress我想應該原理差不多,請自己測試

 

因為我手上有圖片的部落格只有yahoo 部落格,沒有無名

不過我發現現在這兩邊的備份其實都滿方便的

這是我下載下來的部落格備份

blog1解壓縮出來的檔案

blog2把這些資料夾上傳到wp-content中

並把其中 tw-blog_日期_movable-type.txt 這個檔案改名成mt-export.txt

 

繼續閱讀

Post to Twitter Post to Plurk Post to Facebook Send Gmail

sony VAIO 開箱文

今天實驗室 收到一台筆電

雖然不是給我用,但是身為設備的我 就手癢來弄篇開箱文好了XD

 

型號 sony viao svS13136PWB.

 

先來張合影,底下是本體 上面是筆電袋

2013-06-28 15.29.26

2013-06-28 15.29.41

它的詳細規格,最亮眼的地方在於它的 混和硬碟吧,我也想買一顆

2013-06-28 15.30.03

本體內的內容物

說時在的 廠商省成本省太兇了吧,怎麼沒滑鼠…..阿 好吧 以前的筆電袋也比較好

2013-06-28 15.31.28

開啟的樣子

2013-06-28 15.33.02

 

開機後 要先做起始設定

語言、帳號、密碼什麼的

另外線在可以直接綁msn 帳號

最後跳入結束畫面

2013-06-28 16.08.33

 

Post to Twitter Post to Plurk Post to Facebook Send Gmail

適用電子郵件訂閱網站

輸入你的電子郵件地址訂閱網站的新文章,使用電子郵件接收新通知。

訂閱 9 其他用戶

交換連結

Copyright © 2017. All Rights Reserved.

歡迎光臨
初音