OpenCV02 矩陣的掩膜操作

2021-07-24 22:42:51 字數 2280 閱讀 3573

獲得當前行指標const uchar* current = myimage.ptr(row);

獲取當前畫素點p(row,col)的畫素值p(row,col) = current[col]

畫素範圍處理saturate_cast

* 在0~255返回正常值,小於0返回0,大於255返回255

掩膜(mask)操作

//獲取影象的高度跟寬度

int cols = (src.cols-1)*src.channels(); //實際的col值為影象col*影象的通道數

int offsetx = src.channels(); //開始的畫素

int rows = src.rows; //影象寬度

//不能在原影象上輸出

dst = mat::zeros(src.size(), src.type()); //目標影象初始化,把影象全都變成0

//zeros(),生成的影象跟輸入影象的型別跟大小一致,顏色為黑色

//掩膜遍歷

for (int row = 1; row < rows - 1; row++)

}

影象畫素需要控制在0~255之間,否則會發生擷取現象,使影象出現斑點,因此需要加上前面提到的saturate_cast來控制畫素的範圍

以下是不加saturate_cast的原圖和對比度變換後的影象

加上saturate_cast後的原圖和對比度變換後的影象

* src.depth表示點陣圖的深度,有32位,24位,8位等

* 此值不知道的話傳-1就行,暗示跟輸入影象的點陣圖深度一致

* 定義掩膜:

* mat kernel = (mat_(3,3)<<0,-1,0,-1,5,-1,0,-1,0);

mat kernel = (mat_(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0); //定義掩膜

filter2d(src, dst, src.depth(), kernel); //filter2d給啥掩膜就會執行什麼操作

* gettickcount(),獲取執行時間

* 通過此可以計算演算法的執行效率

double t = gettickcount();                      //獲取執行時間

mat kernel = (mat_(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0); //定義掩膜

filter2d(src, dst, src.depth(), kernel); //filter2d給啥掩膜就會執行什麼操作

//t = gettickcount() - t; //當前的執行時間=總共的執行時間-前面的執行時間

double timeconsume = (gettickcount() - t) / gettickcount();//時間消費

從時間效能來說,opencv中的演算法比經典的掩膜演算法用的時間少,(從肉眼的感官來講opencv裡的演算法…好吧,我看花眼了,一開始看著opencv的要好點,然後又變的一樣了)由此可見opencv裡面的演算法還是具有很強的應用性的

02 opencv矩陣的掩膜操作

獲取影象畫素指標 mat.ptr int i 0 獲取畫素矩陣的指標,索引i表示第幾行。獲得當前行指標const uchar current myimage.ptr row 獲取當前畫素點p row,col 的畫素值p row,col current col 畫素範圍處理 saturate cast...

opencv矩陣掩膜操作

include include using namespace std using namespace cv intmain imshow 操作前 src double t gettickcount 定義掩膜矩陣 卷積核 掩膜可以自己定義,不同矩陣效果不同 0 1 0 1 5 1 掩膜可以自己定義,...

opencv 掩膜操作

saturate cast函式保證運算後全部歸一化在0 255之間,注意上面row,col的移動範圍是很有講究的,的四個邊緣行因為沒有完整的上下左右所以省略,然而在實際應用掩膜操作時候並不用到自己這麼複雜的寫 opencv中提供了乙個filter2d函式。mat kernel mat 3,3 0,1...