- 博客(89)
- 资源 (6)
- 收藏
- 关注
原创 Python 用 OpenCV 绘制基本图形系列(总)
以下是 Python 用 OpenCV 绘制基本图形的文章汇总,每篇文章都有函数及参数的详细说明、完成 Python 代码及运行效果图。文章链接如下:Python 安装 OpenCV 及显示图像 (1)Python 用 OpenCV 画点和圆 (2)Python 用 OpenCV 画直线 (3)Python 用 OpenCV 画矩形 (4)Python 用 OpenCV 画椭圆...
2018-11-15 20:55:20 4144 3
原创 ONNXRuntimeError Failed to load library libonnxruntime_providers_cuda.so with error
ONNXRuntimeError Failed to load library libonnxruntime_providers_cuda.so with error
2024-08-22 09:27:52 309
原创 pip install onnxruntime-gpu Error:Could not find a version that satisfies the requirement
pip install onnxruntime-gpu 安装报错ERROR: Could not find a version that satisfies the requirement onnxruntime-gpu (from versions: none)ERROR: No matching distribution found for onnxruntime-gpu
2024-08-22 07:45:00 362
原创 OpenCV resize 的各插值方式的区别与用途
OpenCV resize 的各插值方式的区别与用途,resize 的 interpolation 参数的作用
2024-08-21 11:57:22 566
原创 Emscripten + CMakeLists.txt 将 C++ 项目编译成 WebAssembly(.wasm)/js,并编译 Html 测试
上篇文章已讲解如何安装配置 Emscripten 环境。本篇文章主要讲解如何将基于 CMakeLists 配置的 C++ 项目编译成 WebAssembly 库来供 Web 前端使用。编译结果会生成 .wasm、.js,测试代码会生成 .wasm、.js、.html。
2023-10-31 19:18:18 3828 5
原创 Mac 上安装 Emscripten
背景:Web 端需要使用已有的 C++ 库,需要将 C++ 项目编译成 WebAssembly(.wasm) 供 js 调用。可以将 C++ 编译成 .wasm。
2023-10-30 18:31:16 1345
原创 ijkplayer 源码分析(3):setOption 流程及常用参数设置
本文详细介绍了 ijkplayer 常用的参数配置,从源码分析了 setOption 参数设置的流程,以及五大类参数的详细说明。比如通过参数配置使用硬解码还是软解码,Android 音频播放使用 AudioTrack 还是 OpenSL,是否启用 SoundTouch 等等。那 ijkplayer 有哪些参数配置?各个参数有什么作用?有哪些常用的参数配置呢?
2023-03-30 21:40:13 2703 1
原创 ijkplayer 源码分析(2):消息分发处理机制
ijkplayer 源码详解,源码剖析,详细梳理了 ijkplayer 的消息机制,消息分发处理流程。
2023-03-29 21:34:37 531
原创 Github 突然无法推送代码的解决方案(REMOTE HOST IDENTIFICATION HAS CHANGED)
github 无法推送代码,报错:IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!REMOTE HOST IDENTIFICATION HAS CHANGED!
2023-03-27 11:17:06 1293
原创 实现基于 CMake 编译调试 ijkplayer (ijk0.8.8--ffmpeg4.0)
实现基于 CMake 编译 ijkplayer,可以在 AndroidStudio 中查找、跳转、运行、调试 ijkplayer 源码,项目已开源并上传至 Github
2023-03-23 21:24:33 1110 3
原创 Android ijkplayer 编译踩坑与记录(ijk0.8.8--ffmpeg4.0)
ijkplayer 0.8.8 最新版基于 FFmpeg 4.0 内核编译流程及编译错误解决,修改脚本及编译结果已上传 github,可自行取用
2023-03-21 21:33:44 2449 2
原创 移动端开源播放器对比与选型(ExoPlayer/ijkplayer/VLC/GStreamer/SmarterPlayer)
移动端开源播放器调研和选型,分别介绍了 ExoPlayer、ijkplayer、VLC、GStreamer、SmartPlayer 等开源播放或 SDK 及各自的优缺点
2023-03-21 15:35:32 12436
原创 Assimp 裁剪编译 Android 库
通过编译配置选项裁剪编译,只编自己需要的部分,如本文:Exporter 全不需要,Importer 只编进来 Obj 和 FBX 格式。配置选项说明:-DBUILD_SHARED_LIBS=OFF 关掉动态库,即编译静态库-DASSIMP_NO_EXPORT=ON 关闭所有的 Exporter(不需要导出模型)-DASSIMP_BUILD_ALL_IMPORTERS_BY_DEFAULT=FALSE 关闭编译所有的默认 Importer,即不全部编译-DASSIMP_BUILD_OBJ_IMP
2022-01-12 21:11:05 2539
原创 Assimp 交叉编译 Android iOS 库
基于 Assimp 5.0.1 Release 版裁剪,只保留 OBJ 和 FBX 格式的 3D 模型解析,并使用交叉编译工具链编译成 Android 和 iOS 库编译编译 Android 静态库:① 记得要修改 build_for_android.sh 中最上面的 MY_NDK、MY_SDK、MY_CMAKE 路径,改成自己对应的安装路径② 执行 build_for_android.sh, 最后会生成 Android 平台 arm64-v8a、armeabi-v7a 的静态库编译 i
2021-10-18 21:41:01 1531 7
原创 Mac 搭建 OpenGL 窗口环境(glew glfw)
安装 glew glfwbrew install glewbrew install glfwbrew 安装后的目录在 /usr/local/Cellar 下,后面会使用到路径。用 Clion 创建工程CMakeList.txt 配置如下:cmake_minimum_required(VERSION 3.6)project(CGL3DDemo)set(GLM_H /usr/local/Cellar/glm/0.9.9.8/include)set(GLEW_H /usr/local/Cel
2021-10-12 21:19:04 1625
原创 PS 色彩平衡之算法公式原理详解及 Python 实现
本文介绍了 PS 中色阶的实现原理及公式,并用 Python 实现,自测与 PS 的色阶调整效果基本完全一样。PS 中色彩平衡可以对高光、中间调、阴影 三个色调进行调整,每个色调中有可以对 RGB 三个通道调整,每个通道的调整区间范围是 [-100, 100]色彩平衡之高光高光各色条的现象及规律如下:a. 对于正向的调整,只增加输入图像中该通道的值,其他两个通道不变,比如只调整蓝色 +100,那么原图中蓝色通道值会增加,红色通道和绿色通道不变,如下图;b. 对于负向的调整,该通道值不变,其
2021-07-06 21:35:13 4510 6
原创 PS 阴影/高光中阴影提亮效果之 Python 实现
“阴影/高光”命令是一种用于校正由强逆光而形成剪影的照片,或者校正由于太接近相机闪光灯而有些发白的焦点的方法。在用其他方式采光的图像中,这种调整也可用于使阴影区域变亮。“阴影/高光”命令不是简单地使图像变亮或变暗,它基于阴影或高光中的周围像素(局部相邻像素)增亮或变暗。正因为如此,阴影和高光都有各自的控制选项。默认值设置为修复具有逆光问题的图像,来自 Adobe 官网。阴影:主要用于提亮阴影区域,对非阴影区几乎不产生效果数量:用于控制阴影区要校正的程度,值越大,阴影区域被提的越亮色调:控制被提亮的阴
2021-04-30 19:25:44 5091 3
原创 Python 用 OpenCV 实现 PS 高光/阴影选区
见 PS 高光/阴影 精准选区方法,现用 Python 代码实现类似的 PS 中高光/阴影选区。代码如下:# -*- coding: utf-8 -*-# @Time : 2021-04-28 20:45# @Author : AlanWang4523# @FileName: py_select_shadows_highlight.pyimport osimport sysimport cv2import numpy as npdef hanlde_img(path):
2021-04-28 21:56:18 4423 9
原创 PS 高光/阴影 精准选区方法
1、高光区域选区步骤:选择要处理的图层(图片),然后执行菜单栏:图像–>计算在弹窗中按如下操作:源1:图层选【背景】,通道选【灰色】,不勾选【反向】源2:图层选【背景】,通道选【灰色】,不勾选【反向】混合模式:选【正片叠底】结果:选【选区】ctrl+j 可以复制【高光区域选区】到新的图层2、阴影区域选区步骤:选择要处理的图层(图片),然后执行菜单栏:图像–>计算在弹窗中按如下操作:源1:图层选【背景】,通道选【灰色】,勾选【反向】源2:图层选【背景】,通道选【灰色
2021-04-28 21:26:25 4112
原创 Python 用 OpenCV NumPy 做图像处理的基本操作
在做一些图像处理或算法实验时,使用 Python 比较方便,本文主要介绍在 Python 中使用 OpenCV NumPy 做图像处理的基本操作。熟悉了这些基本操作,进一步对图像做复杂操作就更方便了。如:读取图片保存图片RGB 通道分离转成灰度图取灰度均值对图片做 mask 或抠取指定区域两图片融合# -*- coding: utf-8 -*-# @Time : 2021-04-28 19:45# @Author : AlanWang4523# @FileName: py
2021-04-28 21:03:11 794 1
原创 FFmpeg 增加自定义协议读取 Android InputStream
前言需求背景:1、在使用 FFmpeg 命令处理 Android assets 目录下的文件时,无法读取 assets 目录;2、Android Q 及以上系统,使用 FFmpeg 处理时没有权限直接通过路径读取应用外文件实现方案:1、直接拷贝文件到应用内目录(缺点是需要做一次拷贝,如果文件大耗时较长)2、实现 FFmpeg 自定义协议,回调到 Android 层通过 InputStream 读取流,InputStream 可以来自 assets 或 uriFFmpeg 自定义实现实际就是实
2021-02-02 12:17:49 1484 7
原创 Connect to 127.0.0.1:8118 [/127.0.0.1] failed: Connection refused (Connection refused)
Android Studio 编译失败,错误日志如下:解决方案:把 gradle.properties 文件中如下截图的两行注释掉,再重新编译就 OK 了。systemProp.https.proxyHost=127.0.0.1systemProp.https.proxyPort=8118
2021-01-28 20:59:27 2401
原创 Android 任务执行器(异步串行/异步并行/UIThread)
Android 日常使用中经常会用到异步任务执行,以及有时需要在 UIThread 执行一些 UI 操作。执行异步任务也可以使用 Android 自带的 AsyncTask,但避免与其他应用或其他业务竞争资源,最好可以自己维护一个异步任务管理器。执行一些 UI 操作如果是在 Activity 或 Fragment 中倒是方便,但有时如果不在且需要 Toast 一些提示就不方便,因此封装了一个自定义的 TaskExcutor,提供以下方法: /** * 在【默认线程池】【串行执行】异步任务
2020-11-23 21:47:45 996
原创 Android AudioTrack 播放封装及测试
Android 音频录音/播放系列:《Android AudioRecord 录音封装及测试》对 Android AudioTrack 封装,内部管理播放状态,并在暂停播放时做 FadeOut,在恢复播放时做 FadeIn ,避免快速暂停/恢复的播放杂音问题。并设计成回调的拉模式,通过回调向外层要播放的数据。AudioPlayer 封装如下:import android.media.AudioFormat;import android.media.AudioManager;import and
2020-11-23 21:33:28 1020
原创 以元素数量为依据的 LRUHashMap
一般 LRU(Least Recently Used) 是以容量大小为准,但有时我们需要以元素数量为准来做 ,实现方式如下:import java.util.HashMap;import java.util.LinkedHashMap;import androidx.annotation.Nullable;/** * 参考 LRU 算法实现的 LinkedHashMap,但是以 put 为准,内部维护一个双向链表, * 最新 put 的元素在队尾,最旧 put 的元素在队头,当 put 一个元
2020-11-23 12:54:56 165
原创 Android AudioRecord 录音封装及测试
对 AudioRecord 封装,内部管理录音状态,并读取数据到 ByteBuffer 通知外层获取录音数据。AudioRecord 封装代码如下:import android.media.AudioFormat;import android.media.AudioRecord;import android.media.MediaRecorder;import com.alan.audioio.audio.common.IDataAvailableListener;import com.alan
2020-11-20 19:32:18 853
原创 Android Audio Wav 文件读写操作的封装
Android 在使用 AudioRecord 录音时,采集的是 PCM 数据,有时候在录完后向听下录音效果,还需要拉到电脑端用 AU 播放,手机端没法直接播放 PCM 数据。因此封装了一个 WavFile 在 PCM 前面增加 Wav 头,生成 wav 文件,可以在手机上直接播放。文件头信息见使用方法如下:String wavSavePath = "/sdcard/Alan/audio/record.wav"; // 指定 PCM 格式(跟 AudioRecord 配置一致),
2020-10-28 21:33:20 3353
原创 Android SoundPool 钢琴弹奏(停止播放做 FadeOut)
Android SoundPool 主要用于快速播放多个短音频,[开发文档链接](https://developer.android.com/reference/android/media/SoundPool)。应用场景如:钢琴弹奏 APP,可用 SoundPool 播放每个琴键的音频资源。先看应用场景效果:为使用方便,封装 SoundPool 如下:package com.alan.audioio.audio;import android.content.res.AssetFileDescr.
2020-10-27 20:46:09 767
原创 编译 FFmpeg Android 库(FFmpeg + openh264 合并到一个 libffmpeg.so)
编译脚本和文档已放入 github当前编译环境:Mac OSX 10.15.4NDK : android-ndk-r15c1、编译 openh264我编的 openh264-2.1.1 ,源码地址编译脚本如下:#!/bin/bash# Author: AlanWang# Email: alanwang4523@gmail.com# Date: 2020-06-30# https://github.com/cisco/openh264/tree/v2.1.1# 需要指定 ANDR.
2020-07-27 19:51:02 1740 1
JNI 传递和返回基本参数
2018-03-31
Android OpenGL ES例程代码
2016-05-29
Android 设置Wifi热点、打开与关闭的监听
2015-06-14
Android 手机sdcard目录或文件的拷贝 移动 删除 递归
2014-09-26
动态加载控件(用于图文并茂显示)
2013-09-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人