GVKun编程网logo

Python OpenCV 图片高斯模糊(python图片模糊处理)

1

针对PythonOpenCV图片高斯模糊和python图片模糊处理这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展36篇博文带你学完opencv:python+opencv进阶版学习笔记目录

针对Python OpenCV 图片高斯模糊python图片模糊处理这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展36 篇博文带你学完 opencv :python+opencv 进阶版学习笔记目录、Android OpenCV(零):OpenCV Android SDK、Android Studio,OpenCV jar,java.lang.ClassNotFoundException:org.opencv.R $styleable、Android,opencv - 尝试初始化 Mat 时找不到长时间的 org.opencv.core.Mat.n_Mat() 实现等相关知识,希望可以帮助到你。

本文目录一览:

Python OpenCV 图片高斯模糊(python图片模糊处理)

Python OpenCV 图片高斯模糊(python图片模糊处理)

Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧。

Python OpenCV

    • 基础知识铺垫
    • 函数原型介绍
      • 高斯模糊(Gaussian Blur)
    • 橡皮擦的小节

基础知识铺垫

看到一种说法,解释高斯模糊的比较简单,高斯模糊是带加权的均值模糊。

大概解释如下:

高斯模糊实质上就是一种均值模糊,只是高斯模糊是按照加权平均的,距离越近的点权重越大,距离越远的点权重越小。

通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。

不过阅读起来还是比较费劲的,这种情况,有两种学习方式

第一种,去死磕线性代数,研究卷积算法

第二种,先放一下,因为目前高斯模糊的应用场景,还未完全明确,可以日后用到这部分知识,在进行学习,橡皮擦选择第二种。

高斯模糊在美颜软件上挺常见的,专业图片处理工具也一定有,主要用在磨皮与毛玻璃效果上。

关于高斯模糊,还真找到一篇不错的博客,可以参考(建议在新选项卡打开,对照着学习)。

寻找资料的时候,还发现一个大佬关于高斯模糊的解释,可以参考。

函数原型介绍

高斯模糊(Gaussian Blur)

函数原型如下:

dst = cv2.GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)

参数说明:

  1. src:原图像;
  2. ksize: 高斯核的大小,格式为(width, height),其中 width 和 height 可以不同,两者都是正奇数;如果设为 0,则根据 sigma 得到;
  3. sigmaX: X 方向的高斯核标准差;
  4. sigmaY: Y 方向的高斯核标准差,如果 sigmaY 设为 0,则与 sigmaX 相等,如果两者都为 0,则可以根据 ksize 来计算得到;

官方手册查阅

测试代码如下:

import cv2
import numpy as np
img = cv2.imread(''test.jpg'')

# dst = cv2.GaussianBlur(img,ksize=(5,5),sigmaX=0,sigmaY=0)
# 创建毛玻璃特效
# 参数2:高斯核的宽和高(建议是奇数)
# 参数3:x和y轴的标准差
dst = cv2.GaussianBlur(img, (5, 5), 0)
cv2.imshow(''dst'', dst)

cv2.waitKey()

运行效果与原图对比:

Python OpenCV 图片高斯模糊
你可以继续修改参数值,高斯核尺寸和标准差越大,处理后的图片越模糊

dst1 = cv2.GaussianBlur(img, (5, 5), 0.5)
dst2 = cv2.GaussianBlur(img, (5, 5), 1.5)
dst3 = cv2.GaussianBlur(img, (9, 9), 1.5)
cv2.imshow(''dst1'', dst1)
cv2.imshow(''dst2'', dst2)
cv2.imshow(''dst3'', dst3)

Python OpenCV 图片高斯模糊

橡皮擦的小节

本系列博客为学习之旅,部分概念在没有学到,或者必须彻底掌握前,不做扩展学习。保持每天 1 个小时的学习时间即可。

1 个小时又过去了,对 Python OpenCV 相关的知识点,你掌握了吗?

做为初学者,还有很多地方学习的不深入,希望你与我一起坚持下去。

相关阅读


  1. Python 爬虫 100 例教程,超棒的爬虫教程,立即订阅吧
  2. Python 爬虫小课,精彩 9 讲

今天是持续写作的第 62 / 100 天。
如果你有想要交流的想法、技术,欢迎在评论区留言。


如果你想跟博主建立亲密关系,可以关注博主,或者关注博主公众号 “非本科程序员”,了解一个非本科程序员是如何成长的。
博主 ID:梦想橡皮擦,希望大家点赞、评论、收藏

本文同步分享在 博客“梦想橡皮擦”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

36 篇博文带你学完 opencv :python+opencv 进阶版学习笔记目录

36 篇博文带你学完 opencv :python+opencv 进阶版学习笔记目录

基础版学习笔记传送门
36 篇博文带你学完 opencv :python3+opencv 学习笔记汇总目录(基础版)

进阶版笔记

项目
opencv 进阶学习笔记 1: 调用摄像头用法大全(打开摄像头,打开摄像头并实时不断截屏,读取视频并截图)
opencv 进阶学习笔记 2:numpy 操作图像,色彩空间,查找指定颜色范围,通道分离与合并
opencv 进阶学习笔记 3:像素运算和图像亮度对比度调节
opencv 进阶学习笔记 4:ROI 和泛洪扩充
opencv 进阶学习笔记 5:图像模糊操作,图像锐化,边缘保留滤波 EPF(图像滤镜)
opencv 进阶学习笔记 6:使用鼠标在图像上绘制矩形框或者多边形框
opencv 进阶学习笔记 7:直方图,直方图均衡化,直方图比较,直方图反向投影
opencv 进阶学习笔记 8:模板匹配
opencv 进阶学习 9:图像阈值大全,图像二值化,超大图像二值化
opencv 进阶学习笔记 10:图像金字塔和图像梯度
opencv 进阶学习笔记 11:cannny 边缘检测,直线检测,圆检测
opencv 进阶学习笔记 12:轮廓发现和对象测量
opencv 进阶学习笔记 13:图像形态学操作大全(膨胀,腐蚀,开闭,黑帽,顶帽,梯度)python 版
opencv 进阶学习笔记 14:分水岭算法 实现图像分割

OpenCV 告一段落,接下来,该实战啦。
计算机视觉三大任务,分类,监测,分割。
意见其他一些任务…
图像生成,OCR…


电气专业的计算机萌新,写博文不容易,如果你觉得本文对你有用,请点个赞支持下,谢谢。

Android OpenCV(零):OpenCV Android SDK

Android OpenCV(零):OpenCV Android SDK

OpenCV

OpenCV,全称Open Source Computer VisionLibrary,是基于C/C++编写的,是BSD开源许可的计算机视觉开发框架,其开源协议允许在学术研究与商业应用开发中免费使用它。OpenCV支持Windows、Linux、Mac OS、iOS与Android操作系统上的应用开发。

OpenCV Android SDK

OpenCV Android SDK 是OpenCV针对Android平台提供的开发工具包。Android应用开发一般采用Java或者Kotlin语言进行,而OpenCV主要模块采用C、C++语言编制,因此,我们需要通过JNI技术,实现JAVA或者Kotlin调用OpenCV算法模块的目的。

下载

  • 官网下载地址(https://opencv.org/releases/)
  • 选择OpenCV版本下的Android

SDK概述

SDK目录结构如下:

OpenCV-android-sdk
|_ samples
|_ sdk
|    |_ etc
|    |_ java
|    |_ libcxx_helper
|    |_ native
|          |_ 3rdparty
|          |_ jni
|          |_ libs
|               |_ arm64-v8a
|               |_ armeabi-v7a
|               |_ x86
|               |_ x86_64
|          |_ staticlibs
|               |_ arm64-v8a
|               |_ armeabi-v7a
|               |_ x86
|               |_ x86_64
|
|_ LICENSE
|_ README.android
目录 文件
samples OpenCV运行案例
sdk OpenCV API以及依赖库
sdk/etc Haar和LBP级联分类器
sdk/java OpenCV Java API
sdk/libcxx_helper bring libc++_shared.so into packages
sdk/native OpenCV 静态库、动态库以及JNI文件

英文详细介绍(https://opencv.org/android/)。其实官方的这些介绍并不详细,很多资料随着版本的迭代已过时,意义不大,唯一阅读性高且具有指导意义的应该就是库内的代码与注释了。

开发环境

  • Android Studio 3.5.3 & Android SDK

  • Android NDK 20.1.5948944

  • CMake 3.10.2

  • OpenCV Android SDK 4.2.0

Hello OpenCV Android Sample

  • Open Project
  • 选择OpenCV-android-sdk目录下的samples目录
  • 待编译结束后运行face-detection

Face Detection运行结果

Hello OpenCV Android SDK

  • New Project
  • Import Module…
  • 选择OpenCV-android-sdk目录下的sdk目录,修改或者不修改module的名称
  • 添加app程序对sdk module的依赖
  • 期间可能会遇到一些问题,可能是NDK版本问题,可能是API LEVEL问题,也可能是build tools的问题,对应的稍作处理即可。

示例工程

https://github.com/onlyloveyd/LearningAndroidOpenCV

onlyloveyd 博客专家 发布了158 篇原创文章 · 获赞 263 · 访问量 32万+ 他的留言板 关注

Android Studio,OpenCV jar,java.lang.ClassNotFoundException:org.opencv.R $styleable

Android Studio,OpenCV jar,java.lang.ClassNotFoundException:org.opencv.R $styleable

网络上有关如何在Android Studio中使用OpenCV的大多数示例都涉及将OpenCV模块导入到您的项目中.但是,我试图将OpenCV用作jar,以便避免使用OpenCV的副本使源代码控制存储库混乱.

这些就是我为名为“ app”的应用所执行的步骤.

答:在/ Project / apps下创建一个libs目录.将OpenCV jar放在此处.还将opencv本机库放在子目录中.

B.在/Project/app/build.gradle中执行以下操作

将这些行放在顶部:

repositories { flatDir { dirs 'libs'    } }

将这些行放在android部分中:

sourceSets.main.jniLibs.srcDirs = ['libs']

将此行放在依赖项部分:

    compile filetree(dir: 'libs', include: ['*.jar'])

C.在应用程序标签之后,将这些行添加到AndroidManifest.xml中.

    <uses-sdk android:minSdkVersion="9"/>
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-feature android:name="android.hardware.camera" android:required="false"/>
    <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
    <uses-feature android:name="android.hardware.camera.front" android:required="false"/>
    <uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>

D.不确定是否需要这样做,我尝试了是否使用-似乎没有区别:我在AndroidManifest.xml的application标记内添加以下行:

        <uses-library android:name="org.opencv.android.JavaCameraview" />

E.最后是我的布局xml:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:opencv="http://schemas.android.com/apk/lib/org.opencv.android.JavaCameraview"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <org.opencv.android.JavaCameraview
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:visibility="gone"
        android:id="@+id/main_activity_surface_view"
        opencv:show_fps="true"
        opencv:camera_id="any" />

    </LinearLayout>

这一切都很好.我可以在自己的活动中引用OpenCV,而不会出错.但是布局编辑器给出以下错误:无法实例化以下类:org.opencv.android.JavaCameraview. java.lang.classNotFoundException:org.opencv.R $styleable.

如果只是一个渲染问题,也许我可以忽略它,但是当我运行它时会发生类似的错误.

我想念什么?

(我知道SO中关于此错误的问题有点类似,但他的解决方案涉及导入整个模块,该模块确实有效,但正是我要避免的事情.)

解决方法:

错误消息:

The following classes Could not be instantiated: org.opencv.android.JavaCameraview. java.lang.classNotFoundException: org.opencv.R$styleable

表示在构建时找不到OpenCV资源.如果您将OpenCV包含在jar库中,那将是问题的根源-jar中没有资源.

解决方案是将OpenCV构建为AAR,因为AAR确实有资源.为此构造一个库模块,将其编译为AAR,然后在需要的任何地方重复使用该归档文件.

Android,opencv - 尝试初始化 Mat 时找不到长时间的 org.opencv.core.Mat.n_Mat() 实现

Android,opencv - 尝试初始化 Mat 时找不到长时间的 org.opencv.core.Mat.n_Mat() 实现

如何解决Android,opencv - 尝试初始化 Mat 时找不到长时间的 org.opencv.core.Mat.n_Mat() 实现?

我想使用 OpenCV 做一些事情并且我正在尝试创建 Mat 对象:

import org.opencv.core.CvType;
import org.opencv.core.Mat;
...
Mat imageMat = new Mat(CvType.CV_8U);

在这一行我得到错误:

2021-04-28 15:13:44.657 23613-23613/xxxx.yyyy E/art: No implementation found for long org.opencv.core.Mat.n_Mat() (tried Java_org_opencv_core_Mat_n_1Mat and Java_org_opencv_core_Mat_n_1Mat__)
2021-04-28 15:13:44.676 23613-23613/xxxx.yyyy D/AndroidRuntime: Shutting down VM
2021-04-28 15:13:44.686 23613-23613/xxxx.yyyy E/AndroidRuntime: FATAL EXCEPTION: main
    Process: xxxx.yyyy,PID: 23613
    java.lang.UnsatisfiedLinkError: No implementation found for long org.opencv.core.Mat.n_Mat() (tried Java_org_opencv_core_Mat_n_1Mat and Java_org_opencv_core_Mat_n_1Mat__)
        at org.opencv.core.Mat.n_Mat(Native Method)
        at org.opencv.core.Mat.<init>(Mat.java:26)
        at org.opencv.core.MatOfPoint2f.<init>(MatOfPoint2f.java:12)
        at xxxx.yyyy.Utils.quadrilateralToRect(Utils.java:77)
        at xxxx.yyyy.activities.CropActivity$1.onClick(CropActivity.java:74)
        at android.view.View.performClick(View.java:5619)
        at android.view.View$PerformClick.run(View.java:22298)
        at android.os.Handler.handleCallback(Handler.java:754)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:165)
        at android.app.ActivityThread.main(ActivityThread.java:6375)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)

我在我的 android 项目中将 OpenCV 作为单独的模块,并通过在 implementation project(path: '':OpenCV'') 部分的 build.gradle 中添加 dependencies 将其导入到我的主模块中。

我看过一个 simillar 问题,但使用 OpenCvManager 回答了这个问题,我不想在我的项目中使用它。如果我做对了,我的用户将被迫在使用我的应用程序之前单独安装此管理器,对吗?真恶心。

UPD 1

我已添加

static {
        Log.d(TAG,"OPENCV INITIALIZATION " + (OpenCVLoader.initDebug() ? "SUCCEEDED" : "Failed"));
    }

在我的 MainActivity.java 中。它打印“SUCCEEDED”,但错误没有消失。然而,它变了:

2021-04-28 21:09:47.798 22656-22656/xxxx.yyyy E/AndroidRuntime: FATAL EXCEPTION: main
    Process: xxxx.yyyy,PID: 22656
    java.lang.UnsupportedOperationException: Native object address is NULL
        at org.opencv.core.Mat.<init>(Mat.java:14)
        at xxxx.yyyy.Utils.quadrilateralToRect(Utils.java:94)
        at xxxx.yyyy.activities.CropActivity$1.onClick(CropActivity.java:74)
        at android.view.View.performClick(View.java:5619)
        at android.view.View$PerformClick.run(View.java:22298)
        at android.os.Handler.handleCallback(Handler.java:754)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:165)
        at android.app.ActivityThread.main(ActivityThread.java:6375)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)

UPD 2

UPD 1 中的糟糕错误是因为 new Mat() 中的参数。没有 args 还没有错误。调查仍在继续。

解决方法

建议使用 CMake 链接 SDK,而不是复制编译后的文件。

您可以在您的应用程序 build.gradle 下添加 OpenCV_DIR cmake 参数 android > defaultConfig > externalNativeBuild > cmake

arguments "-DOpenCV_DIR=" + file(''../sdk'').absolutePath + "/native/jni","-DANDROID_TOOLCHAIN=clang","-DANDROID_STL=c++_shared"

然后在CMake中使用find_package安装OpenCV

set(ANDROID_OPENCV_COMPONENTS "opencv_java" CACHE STRING "")
message(STATUS "ANDROID_ABI=${ANDROID_ABI}")
find_package(OpenCV REQUIRED COMPONENTS ${ANDROID_OPENCV_COMPONENTS})

具体流程如下:

https://kcwong-joe.medium.com/how-to-import-opencv-4-5-2-in-android-studio-d9114179628f

,

似乎我找到了解决方案(适用于 OpenCV 3)。需要将文件夹 sdk\native\libs 从下载的 SDK 复制到项目的根目录中,并将其命名为 jniLibs。它的每个 forders 都有一个名为 libopencv_java3.so 的文件,如下所示:

jniLibs in project structure

此外,可能将此代码添加到您的主要活动中很有用:

static {
    if (OpenCVLoader.initDebug()) {
        Log.d(TAG,"OPENCV INITIALIZATION SUCCEEDED");
    } else {
        Log.d(TAG,"OPENCV INITIALIZATION FAILED BUT TRYING TO RELOAD");
        System.loadLibrary("opencv_java3");
    }
}

坏处:这些文件在构建后为您的 APK 增加了 80 Mb。欢迎提供更好的解决方案。

今天的关于Python OpenCV 图片高斯模糊python图片模糊处理的分享已经结束,谢谢您的关注,如果想了解更多关于36 篇博文带你学完 opencv :python+opencv 进阶版学习笔记目录、Android OpenCV(零):OpenCV Android SDK、Android Studio,OpenCV jar,java.lang.ClassNotFoundException:org.opencv.R $styleable、Android,opencv - 尝试初始化 Mat 时找不到长时间的 org.opencv.core.Mat.n_Mat() 实现的相关知识,请在本站进行查询。

本文标签: