工作日誌

專門開一篇文章,當做總結日誌吧。
9\9:
首先,複習下break和continue 。
break是跳出包含它的那個循環,如果是雙重循環且BREAK是在內循環中的,就只能跳出內循環,在外循環中就結束這個雙重循環。
continue是結束本次循環執行下一次循環。
可以用如下方法,多判斷一次bool型的條件語句,退出雙層循環。

if (...)
{
bMatch = false;
break;
}
}
if (!bMatch)
{
break;
}

其次是,在做圖像膨脹操作時,當mask 爲m*n任意形狀時,構造m個run,存儲每一行的形狀,把中心座標設置爲(0,0),遍歷圖像的空白像素進行膨脹操作。這些空白像素是指,存在run的行以及這些行的上下(m-1)>>1 這些行。
這種辦法可以允許靈活的掩膜形狀,並且由於並非遍歷圖片的所有空白像素,所以速度較快。

9\10
再重複一遍,取mat圖像的像素點不要用萌萌傻傻的mat image;
image[row][col] = 255;
要麼指針要麼at~~~~

image.at<uchar>(row,col) = 255;//單通道
image.at<cv::Vec3b>(row,col) [0] = 255;//三通道
image.at<cv::Vec3b>(row,col) [1] = 255;
image.at<cv::Vec3b>(row,col) [2] = 255;
uchar* data = image.ptr<uchar>(row);
data[col] = 255;

還有一個萌萌分不清的東西:[],().
[]是左值運算符,裝下標,起始爲0;
()分好幾類,一個是左值,功能是函數調用,如name(expr_list);二是還是左值,功能是類型構造,如type(expr_list);最後是一個是右值,功能是類型轉換,如(type)expr .
9/14
錯誤程序:

CRun tempRun = { 0 };
CRegion tempRegion;
    for (int i = 0; i < length; i++)
    {
        for (int j = Row1[i]; j <= Row2[i]; j++)
        {

            tempRun.start = Column1[i];
            tempRun.end = Column2[i];
            tempRun.row = j;
            tempRegion.push_back(tempRun);
        }
        Region.push_back(tempRegion);
    }

每個循環做完後,沒有及時將tempRun,tempRegion 清零,導致push_back vetcor 的東西不斷累加。
正確代碼如下:

    for (int i = 0; i < length; i++)
    {
        CRegion tempRegion;
        for (int j = Row1[i]; j <= Row2[i]; j++)
        {
            CRun tempRun = { 0 };
            tempRun.start = Column1[i];
            tempRun.end = Column2[i];
            tempRun.row = j;
            tempRegion.push_back(tempRun);
        }
        Region.push_back(tempRegion);
    }

10/19
一直覺得很難沒去細緻瞭解的離散圖像傅里葉變化其實,說白了,就是鄰域像素加權相加求均值。也就是說,高斯濾波和中值濾波的差異就只是在,加權嗎?–是的

10/30
指針的指針,鏈接中的文章講的不錯。
http://www.cnblogs.com/dzry/archive/2011/05/12/2044835.html
總結下就是,指針也是一個變量,也有它的地址和內容,內容就是它指向的變量的地址。所以A指向整型變量C,指向指針A的指針B也是一樣的,B也有自己的地址,B的內容就是A的地址。如果C是一個數組的話,那麼,指向數組的指針就是存數組首元素的地址。
另外,指向字符的指針的輸出需要mark一下:

char c[]= "hello";
char *p = c;
cout<<p<<endl;
cout<<(void*)p<<endl;
cout<<*p<<endl;

結果是
hello
0032fc21
h

p中存放的是地址,只是當cout時,如果指針是字符型指針,那麼會輸出p中地址指向的內存中的內容(這裏是h)直到遇到’\0’才結束。所以直接輸出p時會輸出hello,而將p強制轉換爲void *時輸出的是地址
11/1
only a small tip
C語言用多行宏定義的時候,需要在每一行後面加行反斜槓“\”
(another tip 給和我一樣傻傻分不清正斜槓和反斜槓的孩紙:
“/”正斜槓,直線的順時針旋轉,“\”反斜槓,直線的逆時針旋轉)

#define MEASURE_ID   measure_handle MeasureHandle;\
                    measure_id_global_count++;\
         Measure.handle_id = measure_id_global_count;

11/2
inline函數,“內聯”或“內嵌”。意指:當編譯器發現某段代碼在調用一個內聯函數時,它不是去調用該函數,而是將該函數的代碼,整段插入到當前位置。這樣做的好處是省去了調用的過程,加快程序運行速度。(函數的調用過程,由於有前面所說的參數入棧等操作,所以總要多佔用一些時間)。這樣做的不好處:由於每當代碼調用到內聯函數,就需要在調用處直接插入一段該函數的代碼,所以程序的體積將增大。
摘自http://blog.csdn.net/forarrow/article/details/6394931

11/3
爲什麼可以用非常量做維度???

int size = 4 * length1 * length2;
MeasureHandle.nearestNeighborPointSet = new nearestNeighborPoint[size]; 

12/12
取整,(int)f
四捨五入,(int) (f+0.5)
向上取整 ceil(i)

12/22
對方已經建了一個倉庫,在我的機子上要下載內容的方法:
在一個非倉庫目錄下,右鍵-SVN checkout ,URL of repository 是對方設置的網絡地址和文件目錄,例如:https://192.168.1.9/svn/HalconRepository
checkout directory 是我自己放這個倉庫的目錄,也就是下載的位置,例如:E:\HalconRepository
其他默認,ok即可。
每次重新下載完了之後,我的vs總是出現:
錯誤 4 error LNK1104: 無法打開文件“opencv_world300d.lib” E:\HalconRepository\HalconFunction\LINK HalconFunction
解決辦法:右鍵工程-屬性-配置管理器-調整成debug模式下,x64位平臺.

12/23
圖像膨脹腐蝕的邊緣像素處理:
在圖像的周圍補齊需要的像素,像素值爲0;
那麼假設使用的是3*3的模板,那麼圖像第一個像素的就有上行和下列都是0像素,在腐蝕操作是,這個像素將被腐蝕。

2016/3/18
一個多月沒有用VS了,之前整理文件的時候,把SVN建的倉庫的文件夾挪了一下地兒,今天打開VS就發現那個文件夾裏面的工程出現了一堆紅線-原因是找不到opencv2/opencv.hpp頭文件。在同事協助下,在不修改工程屬性的情況下,將opencv整個原始文件放到了倉庫文件的同級目錄下,解決了這個問題。

2016/11/28
好記性不如敲筆記,來把計算機視覺深度學習數據處理流程記錄一下。

  1. 首先是訓練集的處理。我們要教計算機先懂得我們感興趣的區域在哪,然後在這個區域內識別目標。通過摳圖將首先原圖的ROI位置告訴計算機,然後再從ROIImage裏面把目標object位置以及groundtruth告訴計算機。如同你反覆教一個完全不懂事的孩子,教的次數足夠多了,並且教的正確了,他就會學會分辨,從而達到識別的目的。每次提供的Object儘量避免周圍的干擾,所以摳圖範圍儘量小,目標儘量擺正。爲了達到這個目的,摳圖之前可能就要做一些圖片的預處理了。第一步驟完成後,餵給計算機的就是原圖以及原圖的ROI座標,ROIImage以及其內部Object的座標和對應的groundtruth。當然,如同老師準備教案用來教育小孩一樣,教案錯了,學生的認知就會錯,所以,要餵給計算機的這兩組數據要做一次初步的檢查,確保label沒有貼錯,位置沒有給錯。
  2. 參考這篇文章, https://github.com/deboc/py-faster-rcnn/blob/master/help/Readme.md
    我們需要爲網絡訓練準備以下材料:
    這裏寫圖片描述
    當然,這一步,對於獲取ROI 和ROI內獲取object兩步操作是分開的,各自需要自己的一套文件資料。假設代碼名稱是getannotation和getannotation_digit。生成的三個文件夾之一是Annotations,裏面是.xml文件,python的包xml.etree.ElementTree可以用來輔助生成樹文件和元素。

  3. 到現在,數據就準備好了。接下來就可以修改網絡模型使其適應現在的識別需求。前文的鏈接講述Train Py-Faster-RCNN on Another Dataset,可以參照修改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章