opencv關於cvNormalize歸一化的用法

2021-07-08 14:17:07 字數 2276 閱讀 2420

normalize

根據某種範數或者數值範圍歸一化陣列.

void cvnormalize( const cvarr* src, cvarr* dst,

double a=1, double b=0, int norm_type=cv_l2,

const cvarr* mask=null );

src輸入陣列

dst輸出陣列,支援原地運算

a輸出陣列的最小/最大值或者輸出陣列的範數

b輸出陣列的最大/最小值

norm_type

歸一化的型別,可以有以下的取值:

cv_c - 歸一化陣列的c-範數(絕對值的最大值)

cv_l1 - 歸一化陣列的l1-範數(絕對值的和)

cv_l2 - 歸一化陣列的(歐幾里德)l2-範數

cv_minmax - 陣列的數值被平移或縮放到乙個指定的範圍

mask

操作掩膜,用於指示函式是否僅僅對指定的元素進行操作

該函式歸一化輸入陣列使它的範數或者數值範圍在一定的範圍內

對於不同的norm_type, 根據我的試驗(mask=null)的時候, a,b(a>b)起的作用結果如下:

norm_type=cv_c時, src 被重新"縮放"(rescale)到dst, 使得dst的值是

線性對映

到[0,1]區間.(a,b其實無作用)

norm_type=cv_l1,或者 cv_l2時, 得到l1,l2規範化的dst.(a,b其實無作用)

norm_type=cv_minmax時, src會被縮放(rescale)和移動(translation)到dst,使得dst的值是

線性對映

到[b,a]區間.

**:#include

#include

#include

#include

#include

#include

void displaymat(const cvmat* mat)

}std::cout<

}int main (int argc, char * const argv) ;

cvmat src=cvmat(6,1,cv_64fc1,data);

cvmat dst=cvmat(6,1,cv_64fc1,data);

std::cout<<"a=5,b=0: ";cvnormalize(&src,&dst,5,0,cv_c,null);

displaymat(&dst);std::cout<<"---------"<

std::cout<<"a=5,b=0: ";cvnormalize(&src,&dst,5,0,cv_l1,null);

displaymat(&dst);std::cout<<"---------"<

std::cout<<"a=5,b=0: ";cvnormalize(&src,&dst,5,0,cv_l2,null);

displaymat(&dst);std::cout<<"---------"<

std::cout<<"a=5,b=0: ";cvnormalize(&src,&dst,5,0,cv_minmax,null);

displaymat(&dst);std::cout<<"---------"<

return 0;

}當cvmat=, a=5,b=0的時候,輸出結果如下:

a=5,b=0: cv_c: 0.1, 0.4, 0.5, 0.6, 0.7, 1,

---------

a=5,b=0: cv_l1: 0.030303, 0.121212, 0.151515, 0.181818, 0.212121, 0.30303,

---------

a=5,b=0: cv_l2: 0.0663723, 0.265489, 0.331862, 0.398234, 0.464606, 0.663723,

---------

a=5,b=0: cv_minmax: 0, 1.66667, 2.22222, 2.77778, 3.33333, 5,

---------

l1_norm: 每個元素乘上1/sqrt(1+4+5+6+7+10)

l2_norm: 每個元素乘上1/sqrt(1+16+25+36+49+100)

cv_minmax:使每個元素限制在[a=5,b=0]之間演算法如下:dst(i)=(src(i)-min(src))*(5-0)/(max(src)-min(src))

1-->0

4-->3*5/9=1.6666

5-->4*5/9=2.2222

python中關於Opencv中關於矩形的函式總結

最近處理影象,以前用的都是matlab,現在入手python比較慢,這幾天看到了很多命名和功能相似的函式,作個記錄總結一下 只是為了能夠看下函式知道它是做什麼的,因此不會對其用法說得面面俱到。看到乙個文章講得清晰詳實,分享一下 功能 計算輪廓內的面積 示例 輸入為乙個點集 contours 0 為前...

關於OpenCV中IplImage的位元組對齊問題

最近利用做專案,遇到了乙個問題 我是用opencv讀的影象,然後自己新開闢了乙個空間,以下是 byte inputimage null iplimage image get null image get cvloadimage imagename,0 imagewidth image get wid...

關於OPENCV中IplImage所儲存

關於opencv中iplimage所儲存資料的討論 shelliar opencv一書中,對iplimage和cvmat的講述不夠詳細,很多時候當我們處理影象的時候,我們會避免用cvmat而是直接用iplimage的方法。iplimage這個結構體中儲存影象資料的部分是char imagedata,...