opencv2 第12天覆習

2021-06-16 14:50:14 字數 2684 閱讀 9355

#include #include #include using namespace cv;

int main()

mat frame;

mat edges;

bool stop = false;

while(!stop)

return 0;

}

根據自己的需要選擇合適的引數,注釋的部分就是如果你想得到的是乙個邊緣影象的話可以這樣使用將其canny一下簡單解決

#include #include #include #include using namespace std;

using namespace cv;

int main()

//按下按鍵後會停留在當前幀,等待下一次按鍵

if( c >= 0)

currentframe++;

}capture.release();

waitkey(0);

return 0;

}

看了很多別人的博文以及書感覺對於lut以及直方圖均衡話不是很了解

這裡轉一下別人的博文看一看

首先建立乙個類:

[cpp]view plain

copy

class histogram1d    

在opencv中,使用calchist計算直方圖

[cpp]view plain

copy

mat gethistogram(const mat &image)    

但是,返回的結果並不是我們希望的「直方圖」,hist只是記錄了每個bin下的畫素個數。我們需要自己利用line函式畫圖:

[cpp]view plain

copy

mat gethistogramimage(const mat &image)  

return histimg;  

}  

函式中對亮度進行了「壓縮」,主要目的是讓直方圖能夠更好的顯示在畫板上。

查詢表,就是乙個一對一或者多對一函式,指定了乙個亮度經過查詢表以後變成另外乙個畫素。在opencv中,使用lut函式來實現

[cpp]view plain

copy

而變化的具體內容,依賴於你自己定義的查詢表,比如,如果你想讓查詢表的結果為當前影象的翻轉,可以在main函式中定義查詢表為:

[cpp]view plain

copy

//用查詢表翻轉影象灰度

int dim(256);  

mat lut(1,&dim,cv_8u);  

for(int i = 0; i < 256; i++)    

當你想讓影象經過查詢表以後直方圖拉伸,變得效果好一點,可以這樣:

將個數低於指定數目(預設為0)的bin捨去,剩下的最小值變為0,最大值變為255,中間的部分線性拉伸:

[cpp]view plain

copy

mat strech(const mat &image,int minvalue = 0)  

//右邊入口

int imax = histsize[0]-1;  

for(;imax >= 0; imax--)  

//建立查詢表

int dim(256);  

mat lookup(1,&dim,cv_8u);  

for(int i = 0; i < 256; i++)  

else

if(i > imax)  

else

}  mat result;  

return result;  

}  

當然,這樣的效果還不是最好的,最好的均衡應該使得直方圖非常平緩,每個bin中的數目差不多,在opencv中,使用equalizehist函式可以實現直方圖均衡功能:

[cpp]view plain

copy

mat equalize(const mat &image)    

有了上面定義的類,我們main函式就變得簡單多了:

[cpp]view plain

copy

#include "histogram.h"

int main()  

//用查詢表拉伸影象灰度值

//忽略那些個數少於100個畫素的bin

mat strech = h.strech(image,100);  

imshow("拉伸後的影象",strech);  

imshow("拉伸後的直方圖",h.gethistogramimage(strech));  

//影象均衡

mat afterequalize = h.equalize(image);  

imshow("均衡後的解果",afterequalize);  

imshow("均衡後的直方圖",h.gethistogramimage(afterequalize));  

waitkey(0);  

return 0;  

opencv2 學習第12天 複習

include include include using namespace cv using namespace std int g slider position 0 int n 0 cvcapture g cap nullptr void ontrackbarslide int pos vo...

opencv2 問題複習 第11天

之前一直有個問題都沒有解決今天又遇到這個問題 簡單來說就是如何把數字加到字串的後面之前做視音訊處理的時候就是搞不定現在出來了,其實是這麼的簡單 string a 3 for int i 0 i 3 i else int main kernel size 3 2 ind 5 kernel mat on...

Opencv2系列學習筆記12 檢測fast特徵

一 fast特徵定義什麼是角點 這次的定義基於假定特徵點周圍的影象強度,通過檢查候選畫素周圍一圈畫素來決定是否接受乙個特徵點。與中心點差異較大的畫素如果組成連續的圓弧,並且弧長大於原周長的 3 4,那麼我們認為找到了乙個特徵點。二 加速技巧 首先測試圓上被90度分割的四個點 頂部,底部,左側及右側 ...