概念
有关于图像卷积的操作概念比较复杂,这里我们只展示锐化操作,有兴趣的朋友可以看一下这篇文章理解深度学习中的卷积。
效果图对比
●源图像
![](https://img.haomeiwen.com/i8850933/e4f4db2c089a2e09.png)
●处理后图像
![](https://img.haomeiwen.com/i8850933/d97d21617e02fba4.png)
函数讲解
●函数原型
○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<opencv2/opencv.hpp>
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_<char>(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);
网友评论