针对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图片模糊处理)
- 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 365 天学习计划,与橡皮擦一起进入图像领域吧。
Python OpenCV
-
- 基础知识铺垫
- 函数原型介绍
-
- 高斯模糊(Gaussian Blur)
- 橡皮擦的小节
基础知识铺垫
看到一种说法,解释高斯模糊的比较简单,高斯模糊是带加权的均值模糊。
大概解释如下:
高斯模糊实质上就是一种均值模糊,只是高斯模糊是按照加权平均的,距离越近的点权重越大,距离越远的点权重越小。
通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。
不过阅读起来还是比较费劲的,这种情况,有两种学习方式
第一种,去死磕线性代数,研究卷积算法
第二种,先放一下,因为目前高斯模糊的应用场景,还未完全明确,可以日后用到这部分知识,在进行学习,橡皮擦选择第二种。
高斯模糊在美颜软件上挺常见的,专业图片处理工具也一定有,主要用在磨皮与毛玻璃效果上。
关于高斯模糊,还真找到一篇不错的博客,可以参考(建议在新选项卡打开,对照着学习)。
寻找资料的时候,还发现一个大佬关于高斯模糊的解释,可以参考。
函数原型介绍
高斯模糊(Gaussian Blur)
函数原型如下:
dst = cv2.GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)
参数说明:
- src:原图像;
- ksize: 高斯核的大小,格式为(width, height),其中 width 和 height 可以不同,两者都是正奇数;如果设为 0,则根据 sigma 得到;
- sigmaX: X 方向的高斯核标准差;
- 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()
运行效果与原图对比:
你可以继续修改参数值,高斯核尺寸和标准差越大,处理后的图片越模糊
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)
橡皮擦的小节
本系列博客为学习之旅,部分概念在没有学到,或者必须彻底掌握前,不做扩展学习。保持每天 1 个小时的学习时间即可。
1 个小时又过去了,对 Python OpenCV 相关的知识点,你掌握了吗?
做为初学者,还有很多地方学习的不深入,希望你与我一起坚持下去。
相关阅读
- Python 爬虫 100 例教程,超棒的爬虫教程,立即订阅吧
- Python 爬虫小课,精彩 9 讲
今天是持续写作的第 62 / 100 天。
如果你有想要交流的想法、技术,欢迎在评论区留言。
如果你想跟博主建立亲密关系,可以关注博主,或者关注博主公众号 “
非本科程序员
”,了解一个非本科程序员是如何成长的。
博主 ID:梦想橡皮擦
,希望大家点赞、评论、收藏
本文同步分享在 博客“梦想橡皮擦”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
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
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
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
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() 实现?
我想使用 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
的文件,如下所示:
此外,可能将此代码添加到您的主要活动中很有用:
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() 实现的相关知识,请在本站进行查询。
本文标签: