1.目的
(1)如何使用opencv函式laplacian實現laplacian運算元的離散模擬
2.原理
在一階導數的極值位置,二階導數為0。所以我們也可以用這個特點來作為檢測影象邊緣的方法。
laplacian運算元的定義:
opencv函式 laplacian 實現了laplacian運算元。 實際上,由於 laplacian使用了影象梯度,它內部呼叫了 sobel 運算元。laplacian運算元卷積核大小必須是奇數
3.部分**解釋
(1)laplacian
/*
laplacian引數解釋
src:輸入影象
grad:輸出影象
ddepth:輸出影象的深度
kernel_size:卷積核大小(必須是奇數)
scale:計算導數時的縮放因子:scale×導數
delta:偏置,對計算結果的偏置
border_default:預設邊界設定
*/
laplacian(src, grad, ddepth, 2*kernel_size+1, scale, delta, border_default);
4.完整**
(1)commoninclude.h
#include
using
namespace
std;
#include
#include
#include
using
namespace cv;
(2)edge.cpp
#include "commoninclude.h"
int edge_type = 0;
int kernel_size = 3;
int scale = 1;
int max_edge_type = 3;
int max_kernel_size = 11;
int ddepth = cv_16s;
double delta = 0;
char windownameorigin = "origin";
char windownameedge = "edge";
/*0:sobel
1:scharr
2:laplace
3:canny
*/mat src, grad;
mat gradx, grady;
mat absgradx, absgrady;
void edgedetector(int, void*)
imshow(windownameedge, grad);
}int main(int argc, char** argv)
src = imread(argv[1]);
if(!src.data)
namedwindow(windownameedge, cv_window_autosize);
//高斯處理
gaussianblur(src, src, size(3,3), 0, 0, border_default);
//轉化為灰度影象
cvtcolor(src, src, cv_bgr2gray);
imshow(windownameorigin, src);
createtrackbar("edge type:\n0 sobel\n1 scharr\n2 laplace \n3 canny", windownameedge,
&edge_type, max_edge_type,
edgedetector);
createtrackbar("kernel size:2*n+1", windownameedge,
&kernel_size, max_kernel_size,
edgedetector);
edgedetector(0,0);
waitkey(0);
}
參考文獻1. imgproc模組 Remapping重對映
1.目的 1 如何使用opencv函式remap實現簡單的重對映 2.原理 把乙個影象中乙個位置的畫素放置到另乙個指定位置的過程,為了完成對映過程,有必要獲得一些插值為非整數畫素座標,因為源影象與目標影象的畫素座標不是一一對應的。我們通過重對映來表達每個畫素的位置 x,y g x,y f h x,y...
imgproc模組 模板匹配
1.目的 1 使用opencv函式matchtemplate 在輸入影象中搜尋影象塊 2 使用opencv函式minmaxloc 尋找陣列中的最大或者最小值 2.原理 1 模板匹配 給定乙個影象塊,搜尋配對的影象塊,當模板是矩形時候,並不一定所有的矩形塊內容都是相關的,在這種情況下,可以利用掩碼分離...
imgproc模組 霍夫圓變換
1.目的 1 如何使用opencv的houghcircles在影象中檢測圓區域 2.原理 1 標準霍夫變換 霍夫圓變換可以根據霍夫線變換來實現 通過極座標來表示圓 a,b 表示圓心,r表示半徑,則圓表示為 x a rcos y b rsin 的值為0 360 一開始我們假設r是已知的,那麼我們就可以...