W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
在本教程中,您將學習如何:
在非常一般的意義上,相關性是圖像的每個部分和運算符(內核)之間的操作。
內核本質上是固定大小的數字系列數組,以及該陣列中的一個錨點,通常位于中心。
假設您想知道圖像中特定位置的結果值。相關值的計算方式如下:
以方程式的形式表達上述程序,我們將具有:
幸運的是,OpenCV為您提供了函數cv :: filter2D,因此您不必對所有這些操作進行編碼。
該程序將使用大小為3,5,7,9和11的內核執(zhí)行過濾操作。
2. 教程代碼如下所示。您也可以從這里下載
#include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
using namespace cv;
int main ( int argc, char** argv )
{
Mat src, dst;
Mat kernel;
Point anchor;
double delta;
int ddepth;
int kernel_size;
const char* window_name = "filter2D Demo";
String imageName("../data/lena.jpg"); // by default
if (argc > 1)
{
imageName = argv[1];
}
src = imread( imageName, IMREAD_COLOR ); // Load an image
if( src.empty() )
{ return -1; }
anchor = Point( -1, -1 );
delta = 0;
ddepth = -1;
int ind = 0;
for(;;)
{
char c = (char)waitKey(500);
if( c == 27 )
{ break; }
kernel_size = 3 + 2*( ind%5 );
kernel = Mat::ones( kernel_size, kernel_size, CV_32F )/ (float)(kernel_size*kernel_size);
filter2D(src, dst, ddepth , kernel, anchor, delta, BORDER_DEFAULT );
imshow( window_name, dst );
ind++;
}
return 0;
}
Explanation
String imageName("../data/lena.jpg"); // by default
if (argc > 1)
{
imageName = argv[1];
}
src = imread( imageName, IMREAD_COLOR ); // Load an image
if( src.empty() )
{ return -1; }
anchor = Point(-1,-1);
delta = 0;
ddepth = -1;
kernel_size = 3 + 2*( ind%5 );
kernel = Mat::ones( kernel_size, kernel_size, CV_32F )/ (float)(kernel_size*kernel_size);
第一行是將kernel_size更新為在范圍內的奇數值:[3,11]。第二行實際上通過將其值設置為1′s 填充矩陣并通過將其除以元素數量進行規(guī)范化來構建內核。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: