1. 程式人生 > >opencv學習-遍歷影象和鄰域,

opencv學習-遍歷影象和鄰域,

1.銳化運算元計算方式:sharpened_pixel=5*current-left-right-up-down
將一幅影象減去它經過拉普拉斯濾波之後的影象,這幅影象的邊緣部分將得到放大。
2.saturate_cast(防止溢位)函式的作用是:當運算完之後,結果為負,則轉為零,結果超出255,則為255
3.scalar是一個由長度為4的陣列作為元素構成的結構體,最多可以儲存四個值,沒有提供的值預設為0
4.kernel:核,一個核定義了一個影象濾波器
5.OpenCV定義了一個特殊的函式來完成濾波處理:filter2D
6.filter2D( InputArray src, OutputArray dst, int ddepth,
InputArray kernel, Point anchor=Point(-1,-1),
double delta=0, int borderType=BORDER_DEFAULT )
InputArray src:輸入影象
OutputArray dst:輸出影象
int ddepth:目標影象深度;當ddepth輸入值為-1時,目標影象和原影象深度保持一致;
InputArray kernel:卷積核(或者是相關核),一個單通道浮點型矩陣。如果想在影象不同的通道使用不同的kernel,可以先使用split()函式將影象通道事先分開。
Point anchor=Point(-1,-1):核心的基準點(anchor),其預設值為(-1,-1)說明位於kernel的中心位置。基準點即kernel中與進行處理的畫素點重合的點
double delta=0:在儲存目標影象前可選的新增到畫素的值,預設值為0
int borderType=BORDER_DEFAULT:畫素向外逼近的方法,預設值是BORDER_DEFAULT,即對全部邊界進行計算

#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
void sharpen2D(const Mat&image, Mat&result)
{
 Mat kernel(3, 3, CV_32F, Scalar(0));
 kernel.at<float>(1, 1) = 5.0;
 kernel.at<float>(0, 1) = -1;
 kernel.at<float>(1, 0) = -1;
 kernel.at<float>(1, 2) = -1;
 kernel.at<float>(2, 1) = -1;
 filter2D(image, result, image.depth(), kernel);
}
int main()
{
 Mat src = imread("3.jpg");
 Mat dst;
 sharpen2D(src, dst);
 namedWindow ("picture");
 imshow("picture", dst); waitKey(0);
 return 0;
}

在這裡插入圖片描述