如何利用opencv来实现一个图像滤波器.
第一步当然就是把opencvsdk配置到我们的项目中来了,并且配置好了之后,我们还要进行load成功才可以使用.这一部分可以参照我的上一篇笔记
第二步则是调用opencv的函数,进行图像处理,下面是五种滤镜的效果,及实现代码.
效果:
核心代码:
public class SharpenProcessor implements ImgProcessor {
private Mat dec;
private Mat src;
private Bitmap bitmap_dec;
private Mat kernel;
@Override
public void initProcessor(Bitmap bitmap_src) {
bitmap_dec = Bitmap.createBitmap(bitmap_src.getWidth(), bitmap_src.getHeight(), Bitmap.Config.ARGB_8888);
src = new Mat();
dec = new Mat();
Utils.bitmapToMat(bitmap_src, src);
kernel = new Mat(3, 3, CvType.CV_16SC1);
}
@Override
public void processor() {
kernel.put(0, 0, 0, -1, 0, -1, 5, -1, 0, -1, 0);
Imgproc.filter2D(src, dec, src.depth(), kernel);
Utils.matToBitmap(dec, bitmap_dec);
}
public void processor(int progress) {
kernel.put(0, 0, 0, -1, 0, -1, progress, -1, 0, -1, 0);
Imgproc.filter2D(src, dec, src.depth(), kernel);
Utils.matToBitmap(dec, bitmap_dec);
}
@Override
public Bitmap getResult() {
return bitmap_dec;
}
}
效果:
核心代码:
//<editor-fold desc="高斯模糊">
ImageView image_src = (ImageView) findViewById(R.id.image_src);
ImageView image_result = (ImageView) findViewById(R.id.image_result);
Bitmap src = BitmapFactory.decodeResource(getResources(), R.drawable.image);
Mat mat = new Mat(src.getWidth(), src.getHeight(), CvType.CV_8UC4);
Utils.bitmapToMat(src, mat);
Imgproc.blur(mat, mat, new Size(30, 30));
Bitmap bitmap = Bitmap.createBitmap(mat.cols(), mat.rows(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(mat, bitmap);
image_src.setImageBitmap(src);
image_result.setImageBitmap(bitmap);
//</editor-fold>
效果:
核心代码:
/**
* 腐蚀运算
*/
public class ErodeProcessor implements ImgProcessor {
private Mat dec;
private Mat src;
private Bitmap bitmap_dec;
private Mat kernel;
@Override
public void initProcessor(Bitmap bitmap_src) {
bitmap_dec = Bitmap.createBitmap(bitmap_src.getWidth(), bitmap_src.getHeight(), Bitmap.Config.ARGB_8888);
src = new Mat();
dec = new Mat();
Utils.bitmapToMat(bitmap_src, src);
}
@Override
public void processor() {
processor(3);
}
@Override
public void processor(int wight) {
kernel = Imgproc.getStructuringElement(Imgproc.MORPH_ELLIPSE, new Size(wight, wight));
Imgproc.erode(src, dec, kernel);
Utils.matToBitmap(dec, bitmap_dec);
}
@Override
public Bitmap getResult() {
return bitmap_dec;
}
}