opencv學習筆記(二)

2021-07-03 12:09:52 字數 1412 閱讀 3274

任何影象處理演算法,都是從操作每個畫素開始的。即使你不會使用opencv提供的各種影象處理函式,只要你了解影象處理演算法的基本原理,也可以寫出具有相同功能的程式。在opencv中,提供了種訪問每個畫素的方法:使用at方法、使用迭代器、使用指標。

這三種方法在訪問速度上略有差異。debug模式下,這種差異非常明顯,不過在release模式下,這種差異就不太明顯了。我們通過一組程式來說明這幾種方法,程式的目的是減少影象中顏色的數量,比如原來的影象是是256中顏色,我希望將它變成64種顏色,那我只需要將原來的顏色除以4(整除)以後再乘以4就可以了。

先看主程式:

[cpp]view plain

copy

#include 

#include 

#include 

using

namespace

std;  

using

namespace

cv;  

void

colorreduce(mat& inputimage, mat& outputimage, 

intdiv);  

intmain()    

主程式中呼叫colorreduce函式來完成減少顏色的工作:

下面是使用at方法的colorreduce函式,這種方法簡潔明瞭,符合大家對畫素的直觀認識。執行時間為0.334131。

[cpp]view plain

copy

void

colorreduce(mat& inputimage, mat& outputimage, 

intdiv)  

}  }  

下面是使用迭代器的colorreduce函式,這種方法與stl庫的用法類似。執行時間為0.375629

[cpp]view plain

copy

void

colorreduce(mat& inputimage, mat& outputimage, 

intdiv)  

}  最後是使用指標的方法,這種方法最快,但是略有點抽象。執行時間為0.00705378!

[cpp]view plain

copy

void

colorreduce(mat& inputimage, mat& outputimage, 

intdiv)  

}  }  

[cpp]view plain

copy

順便說一句,opencv中的彩色影象不是以rgb的順序存放的,而是bgr,所以程式中的outputimage.at(i,j)[0]代表的是該點的b分量。同理還有(*it)[0]。

OpenCV學習筆記二

影象操作 獲取畫素值 單通道 gray src.at row,col 三通道 int height src.rows int width src.cols int channels src.channels for int row 0 row height row 作用同上,或操作 bitwise ...

opencv學習筆記(二)

1.畫素讀寫和修改操作 讀乙個gray畫素點的畫素值 cv 8uc1 scalar intensity img.at y,x 或者scalar intensity img.at point x,y 讀乙個多通道畫素點的畫素值 vec3f intensity img.at y,x float blue...

opencv學習筆記 二 操作畫素

第二章 操作畫素 2.1引言 灰度影象畫素由8位無符號數來表示,0表示黑色,255表示白色。彩色影象 rgb 畫素由三個8位的無符號數來表示,儲存方式為三元數 b,g,r 2.2訪問畫素值 mat類有若干成員和成員函式來獲取影象的屬性 成員cols和rows表示 寬和高 列和行 成員函式 at 畫素...