OpenCV实现图片锐化

简介: 纯粹阅读,请移步OpenCV实现图片锐化效果图源码KqwOpenCVBlurDemo锐化也可以看作是一种线性滤波操作,并且锚点像素有较高的权重,而周围的像素权重较低。

纯粹阅读,请移步OpenCV实现图片锐化

效果图

效果图

效果图

源码

KqwOpenCVBlurDemo

锐化也可以看作是一种线性滤波操作,并且锚点像素有较高的权重,而周围的像素权重较低。
因此,我们可以自定义一个这样的

自定义核

/*
    自定义核
    0   -1  0
    -1  5   -1
    0   -1  0
  */
Mat kernel = new Mat(3, 3, CvType.CV_16SC1);
kernel.put(0, 0, 0, -1, 0, -1, 5, -1, 0, -1, 0);

这里我们将图像的深度设为16SC1,表示包含一个通道(C1),图像中的每个像素包含一个16比特有符号整型数(16S)。

定义完以后,我们对图像和做卷积操作

// 对图像和自定义核做卷积
Imgproc.filter2D(src, src, src.depth(), kernel);
  • 第一个参数表示输入的图像
  • 第二个参数表示输出的图像
  • 第三个参数表示图像的深度
  • 第四个参数是我们自定义的核

封装

这里我用到了RxJava。主要是因为图片处理是耗时操作,会阻塞线程,为了防止界面卡顿,这里使用RxJava进行了线程切换。

/**
 * 锐化图片
 *
 * @param bitmap 要处理的图片
 */
public void filter2D(Bitmap bitmap) {
    // 使用RxJava处理图片
    if (null != mSubscriber)
        Observable
                .just(bitmap)
                .map(new Func1<Bitmap, Bitmap>() {

                    @Override
                    public Bitmap call(Bitmap bitmap) {
                        // Bitmap转为Mat
                        Mat src = new Mat(bitmap.getHeight(), bitmap.getWidth(), CvType.CV_8UC4);
                        Utils.bitmapToMat(bitmap, src);

                        /*
                            自定义核
                            0   -1  0
                            -1  5   -1
                            0   -1  0
                          */
                        Mat kernel = new Mat(3, 3, CvType.CV_16SC1);
                        kernel.put(0, 0, 0, -1, 0, -1, 5, -1, 0, -1, 0);
                        // 对图像和自定义核做卷积
                        Imgproc.filter2D(src, src, src.depth(), kernel);

                        // Mat转Bitmap
                        Bitmap processedImage = Bitmap.createBitmap(src.cols(), src.rows(), Bitmap.Config.ARGB_8888);
                        Utils.matToBitmap(src, processedImage);

                        return processedImage;
                    }
                })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(mSubscriber);
}

调用

// 图片处理的工具类
mBlurUtil = new BlurUtil(new Subscriber<Bitmap>() {
    @Override
    public void onCompleted() {
        // 图片处理完成
        dismissProgressDialog();
    }

    @Override
    public void onError(Throwable e) {
        // 图片处理异常
        dismissProgressDialog();
    }

    @Override
    public void onNext(Bitmap bitmap) {
        // 获取到处理后的图片
        mIvImageProcessed.setImageBitmap(bitmap);
    }
});

// 锐化图片
mBlurUtil.filter2D(mSelectImage);
相关文章
|
1月前
|
计算机视觉
Opencv学习笔记(十二):图片腐蚀和膨胀操作
这篇文章介绍了图像腐蚀和膨胀的原理、作用以及使用OpenCV实现这些操作的代码示例,并深入解析了开运算和闭运算的概念及其在图像形态学处理中的应用。
116 1
Opencv学习笔记(十二):图片腐蚀和膨胀操作
|
1月前
|
计算机视觉 Python
Opencv学习笔记(二):如何将整个文件下的彩色图片全部转换为灰度图
使用OpenCV库将一个文件夹内的所有彩色图片批量转换为灰度图,并提供了相应的Python代码示例。
35 0
Opencv学习笔记(二):如何将整个文件下的彩色图片全部转换为灰度图
|
1月前
|
计算机视觉 Python
Opencv学习笔记(一):如何将得到的图片保存在指定目录以及如何将文件夹里所有图片以数组形式输出
这篇博客介绍了如何使用OpenCV库在Python中将图片保存到指定目录,以及如何将文件夹中的所有图片读取并以数组形式输出。
148 0
Opencv学习笔记(一):如何将得到的图片保存在指定目录以及如何将文件夹里所有图片以数组形式输出
|
6月前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.13图片冷白皮(美白)处理
OpenCV这么简单为啥不学——1.13图片冷白皮(美白)处理
70 0
|
6月前
|
存储 编解码 监控
OpenCV这么简单为啥不学——2.1、imwrite逐帧保存图片
OpenCV这么简单为啥不学——2.1、imwrite逐帧保存图片
120 0
|
6月前
|
人工智能 Linux API
OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)
OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)
104 0
|
1月前
|
计算机视觉
Opencv错误笔记(一):通过cv2保存图片采用中文命名出现乱码
在使用OpenCV的cv2模块保存带有中文命名的图片时,直接使用cv2.imwrite()会导致乱码问题,可以通过改用cv2.imencode()方法来解决。
135 0
Opencv错误笔记(一):通过cv2保存图片采用中文命名出现乱码
|
3月前
|
计算机视觉 Windows Python
windows下使用python + opencv读取含有中文路径的图片 和 把图片数据保存到含有中文的路径下
在Windows系统中,直接使用`cv2.imread()`和`cv2.imwrite()`处理含中文路径的图像文件时会遇到问题。读取时会返回空数据,保存时则无法正确保存至目标目录。为解决这些问题,可以使用`cv2.imdecode()`结合`np.fromfile()`来读取图像,并使用`cv2.imencode()`结合`tofile()`方法来保存图像至含中文的路径。这种方法有效避免了路径编码问题,确保图像处理流程顺畅进行。
343 1
|
1月前
|
Serverless 计算机视觉
语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆
这篇文章介绍了如何使用OpenCV库通过mask图像绘制分割对象的外接椭圆。首先,需要加载mask图像,然后使用`cv2.findContours()`寻找轮廓,接着用`cv2.fitEllipse()`拟合外接椭圆,最后用`cv2.ellipse()`绘制椭圆。文章提供了详细的代码示例,展示了从读取图像到显示结果的完整过程。
53 0
语义分割笔记(三):通过opencv对mask图片来画分割对象的外接椭圆
|
3月前
|
存储 编解码 API
python多种方法压缩图片,opencv、PIL、tinypng、pngquant压缩图片
python多种方法压缩图片,opencv、PIL、tinypng、pngquant压缩图片
257 1
下一篇
无影云桌面