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;
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42017043/article/details/83373797