OpenCV 自定義harris檢測

2022-02-06 03:21:43 字數 2227 閱讀 5396

關於harris角點檢測的原理以及matlab版本,請移步

小白初學,這裡採用opencv實現之,把自己遇到的疑問一一表述出來,以備後用。

cv_(s|u|f)c

第一種形式,返回特定尺寸與型別的零矩陣,比如  mat a = mat::zeros(3,3,cv_32fc1);

第二種形式,程式中採用的方式,mat::zeros(src.size(), cv_32fc(6));    

我的理解是這兩種形式實質一樣

函式原型, cornereigenvalsandvecs( inputarray src, outputarray dst,

int blocksize, int ksize,

int bordertype = border_default );

函式呼叫參看後面的程式。

1

#include 2 #include 3 #include 4

using

namespace

cv;5

using

namespace

std;

6mat src, gray_src;

7mat harris_dst, harrisrspimg;

8double

harris_min_rsp;

9double

harris_max_rsp;

10int qualitylevel = 30;11

const

char* harris_win = "

custom harris corners dector";

12int max_count = 100;13

void customharris_demo(int, void *);

1415

intmain()

1624 namedwindow("

input_image

", cv_window_autosize);

25 imshow("

input_image

", src);

26cvtcolor(src, gray_src, color_bgr2gray);

27//

計算特徵值

28int blocksize = 3;29

int ksize = 3;30

double k = 0.04;31

32 harris_dst = mat::zeros(src.size(), cv_32fc(6)); //

6通道33 harrisrspimg =mat::zeros(src.size(), cv_32fc1);

34 cornereigenvalsandvecs(gray_src, harris_dst, blocksize, ksize, 4

);35

//計算響應

36for (int row = 0; row < harris_dst.rows; row++)

3744

}45 minmaxloc(harrisrspimg, &harris_min_rsp, &harris_max_rsp, 0, 0, mat());//

求最大最小響應

46namedwindow(harris_win, cv_window_autosize);

47 createtrackbar("

quality value

", harris_win, &qualitylevel, max_count, customharris_demo);

48 customharris_demo(0, 0

);49 waitkey(0

);50

return0;

51}52void customharris_demo(int, void*)

56 mat resultimg =src.clone();

57float t = harris_min_rsp + (((double)qualitylevel) / max_count)*(harris_max_rsp -harris_min_rsp);

58for (int row = 0; row < src.rows; row++) 64}

65}6667

imshow(harris_win, resultimg);

68 }

opencv自定義卷積核

include opencv2 imgproc imgproc.hpp include opencv2 highgui highgui.hpp using namespace cv mat get blur kernel int kernel size 獲得歸一化濾波的卷積核 int main in...

opencv 自定義線性濾波

卷積概念 卷積是影象處理的乙個操作,是依據kernel對影象每個畫素點進行操作,kernel本質上是乙個固定大小的矩陣陣列,其中心為錨點。把kernel放在畫素的陣列之上,求錨點周圍覆蓋的畫素乘積之和 包括錨點 用其來替換錨點下的畫素值。稱之為卷積操作。公式如圖所示。依次對影象進行該操作。常見運算元...

opencv 自定義線性濾波

自定義線性濾波 效果 在學習自定義線性濾波前,需要了解卷積的相關概念 影象中的卷積 最常見的運算元 在邊緣檢測中經常用到,是canny邊緣檢測中重要的一步,通過sobel運算元得到梯度 銳化的掩膜中間是5,拉普拉斯運算元中間是4 拉普拉斯運算元和sobel運算元被用來尋找梯度 尋找影象的邊緣 和掩膜...