filter2D(图像卷积操作)

概念

有关于图像卷积的操作概念比较复杂,这里我们只展示锐化操作,有兴趣的朋友可以看一下这篇文章理解深度学习中的卷积。

效果图对比

●源图像


filter2D(图像卷积操作)_第1张图片

●处理后图像


filter2D(图像卷积操作)_第2张图片

函数讲解

●函数原型
○c++

void filter2D( InputArray src, OutputArray dst, int ddepth,
                            InputArray kernel, Point anchor = Point(-1,-1),
                            double delta = 0, int borderType = BORDER_DEFAULT );

○Android

void filter2D(Mat src, Mat dst, int ddepth, Mat kernel, Point anchor, double delta, int borderType)

●参数解释
○src:源图像Mat对象
○dst:目标图像Mat对象
○ddepth:目标图像的深度,一般填-1即可,表示源图像与目标图像深度相同。
○kernel:卷积核,一个单通道浮点型矩阵。如果想在图像不同的通道使用不同的kernel,可以先使用split()函数将图像通道事先分开。
○anchor:内核的基准点,其默认值为(-1,-1)说明位于kernel的中心位置。基准点即kernel中与进行处理的像素点重合的点,不填即默认值。
○delta :在储存目标图像前可选的添加到像素的值,默认值为0,不填就是默认值。
○borderType :像素向外逼近的方法,默认值是BORDER_DEFAULT,即对全部边界进行计算,不填就是默认。

函数使用

●c++中

#include
using namespace cv;
int main() {
    Mat src = imread("C:/Users/Administrator/Desktop/sb.png");//引入源图像
    if (src.empty()) {
        return -1;
    }
    imshow("src", src);//展示源图像
    Mat dst;
    Mat kernal = (Mat_(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);//生成卷积核
    filter2D(src,dst,-1,kernal);
    imshow("dst", dst);//展示目标图像
    waitKey(0);
    return 0;
}

●Android中

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_beauty);//获取源图像Bitmap对象
Mat src = new Mat();
Mat dst = new Mat();
Utils.bitmapToMat(bitmap,src);//Bitmap转换为Mat对象
//==================生成卷积核======================
Mat kx = new Mat(3, 3, CvType.CV_32FC1);
float[] robert_x = new float[]{0, -1, 0, -1, 5, -1, 0, -1, 0};
kx.put(0, 0, robert_x);
//===================================================
Imgproc.filter2D(src,dst,-1,kx );//进行卷积操作
Utils.matToBitmap(dst,bitmap);//Mat转换为Bitmap对象
imageView.setImageBitmap(bitmap);

你可能感兴趣的:(filter2D(图像卷积操作))