当前位置: 首页 > news >正文

Android修行手册-Chaquopy中opencv、numpy的初步应用

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总
游戏脚本-辅助自动化Android控件全解手册再战Android系列
Scratch编程案例软考全系列Unity3D学习专栏
蓝桥系列ChatGPT和AIGC

👉关于作者

专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎底部卡片私我,交流让学习不再孤单

在这里插入图片描述

👉实践过程

😜OpenCV

对于Android开发者而言,使用OpenCV可以实现很多有趣的功能。然而,Android开发中使用OpenCV也存在一些问题,比如对库的导入和集成需要较高的技术门槛。

相比之下,使用Chaquopy集成Python和OpenCV库,可以简化Android开发中对OpenCV库的使用和集成,使得开发人员可以更加轻松地开发应用。使用Chaquopy,开发人员可以直接使用Python编写OpenCV的代码,避免Java语言本身的一些限制。

pip{install "opencv-python"
}

在这里插入图片描述
经由Java读取图片,并转换格式传给python OpenCV进行运算,运算后如何再将python格式转换成Java格式进行显示,达到java与python交互应用。
由于python运行OpenCV运算时,需要将Java的byte格式透过numpy转成OpenCV格式,因此透过以下程式码可进行转换。

opencv_python.py:

import numpy as np
import cv2def opencv_process_image(data):# 读取图片数据image = cv2.imdecode(np.asarray(data),cv2.IMREAD_COLOR)# 将图像转换为灰度图像gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 将处理后的图像转换为png格式并转换为byte数组is_success, im_buf_arr = cv2.imencode(".png", gray_image)byte_im = im_buf_arr.tobytes()# 返回处理后的图像数据return byte_im​

Java


public class MainActivity extends AppCompatActivity {Button Go_btn;ImageView src_image, res_image;BitmapDrawable drawable;Bitmap  bitmap;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Go_btn = findViewById(R.id.Go_button);src_image = (ImageView) findViewById(R.id.source_imageview);res_image = (ImageView) findViewById(R.id.response_imageview);//初始化python环境if(!Python.isStarted()){Python.start(new AndroidPlatform(this));}Python python_cv = Python.getInstance();Go_btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {// 获取源图片并转换为Bitmap对象drawable = (BitmapDrawable) src_image.getDrawable();bitmap = drawable.getBitmap();// 将Bitmap转换为byte[]对象ByteArrayOutputStream stream = new ByteArrayOutputStream();bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);byte[] byteArray = stream.toByteArray();// 调用Python方法处理图片PyObject cvObject = python_cv.getModule("opencv_python");byte[] bytes = cvObject.callAttr("opencv_process_image",byteArray).toJava(byte[].class);// 将处理后的图片显示到画面上Bitmap bmp = BitmapFactory.decodeByteArray(bytes,0, bytes.length);res_image.setImageBitmap(bmp);}});}
}

在这里插入图片描述

😜numpy

提供两个范例,

  1. 使用numpy计算两个矩阵的乘积。
  2. 使用numpy生成随机数组,并计算其平均值和标准差,除了透过python使用numpy计算外,还能将计算后的数值返回并转成java格式,供使用者能够在java进行后续应用,达到java与python交互应用。

使用numpy计算两个矩阵的乘积: 在hello_python.py档案内增加。

import numpy as np#使用numpy计算两个矩阵的乘积
def matrix_multiply():a = np.array([[1, 2], [3, 4]])b = np.array([[5, 6], [7, 8]])c = np.matmul(a, b)return c

将python内numpy计算完后的数值读取到 Java 中

//初始化python环境
if(!Python.isStarted()){Python.start(new AndroidPlatform(this));
}//使用numpy计算两个矩阵的乘积
Python py = Python.getInstance();//调用hello_python.py里面的matrix_multiply函式
PyObject pyObj = py.getModule("hello_python").get("matrix_multiply");//将matrix_multiply计算完的数值,换成java中的float类型
float[][] result = pyObj.call().toJava(float[][].class);
String resultStr = "";
for (int i = 0; i < result.length; i++) {for (int j = 0; j < result[i].length; j++) {resultStr += result[i][j] + " ";}resultStr += "\n";}
Log.d("Result", resultStr);

使用numpy生成随机数组,并计算其平均值和标准差: 在hello_python.py档案内增加。

import numpy as np#使用numpy生成随机数组,并计算其平均值和标准差。
def numpy_example():# Generate a random array with shape (3, 3)a = np.random.rand(3, 3)# Calculate the mean of the arraymean = np.mean(a)# Calculate the standard deviation of the arraystd = np.std(a)return mean, std​
//使用numpy生成随机数组,并计算其平均值和标准差。
Python np = Python.getInstance();
//调用hello_python.py里面的numpy_example函式
PyObject npObj = np.getModule("hello_python").get("numpy_example");
PyObject npResult = npObj.call();
//numpy_example的返回值有两个,将其分别转换成java中的float类型
float mean = npResult.asList().get(0).toFloat();
float std = npResult.asList().get(1).toFloat();
Log.d("Result"," mean = "+ mean);
Log.d("Result"," std = "+ std);

👉其他

📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。

温馨提示点击下方卡片获取更多意想不到的资源。
空名先生

相关文章:

Android修行手册-Chaquopy中opencv、numpy的初步应用

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…...

VBA将当前打开的表格生成PDF图片

前言 VBA将当前的表格存储成PDF文件进行存储 代码 Sub ExportToPDF()Dim FilePath As StringDim FileName As StringDim ExportRange As Range 设置导出文件路径及名称FilePath "D:\Users\"FileName "ExportedPDF" 设置导出区域范围Set ExportRange Ra…...

解锁AI大模型秘籍:未来科技的前沿探索

在当今这个技术高速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为了我们生活中不可或缺的一部分。从简单的个人助手到复杂的数据分析和决策制定&#xff0c;AI的应用范围日益扩大&#xff0c;其目的是为了让我们的生活变得更加智能化。本文旨在探讨AI如何…...

一文带你了解MySQL之B+树索引的原理

前言 学完前面我们讲解了InnoDB数据页的7个组成部分&#xff0c;知道了各个数据页可以组成一个双向链表&#xff0c;而每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表&#xff0c;每个数据页都会为存储在它里边儿的记录生成一个页目录&#xff0c;在通过主键查…...

【Vue】npm run build 打包报错:请在[.env.local]中填入key后方可使用...

报错如下 根目录添加 .env.local 文件 .env.local &#xff1a;本地运行下的配置文件 配置&#xff1a;VUE_GITHUB_USER_NAME 及 VUE_APP_SECRET_KEY 原因...

中国电子学会2020年06月真题C语言软件编程等级考试三级(含详细解析答案)

中国电子学会考评中心历届真题&#xff08;含解析答案&#xff09; C语言软件编程等级考试三级 2020年06月 编程题五道 总分:100分一、最接近的分数&#xff08;20分&#xff09; 分母不超过N且小于A/B的最大最简分数是多少? 时间限制: 1000ms 内存限制: 65536kb 输入…...

WPF的DataGrid自动生成中文列头

直接将一个对象集合绑定到DataGrid上面&#xff0c;设置自动生成列AutoGenerateColumns"True"&#xff0c;DataGrid会自动根据对象类的属性生成对应的列 示例类对象&#xff1a; public class DataModel{public int Id { get; set; }public string Name { get; set;…...

CSS【详解】居中对齐 (水平居中 vs 垂直居中)

水平居中 内部块级元素的宽度要小于容器(父元素) 方案一&#xff1a;文本居中对齐&#xff08;内联元素&#xff09; 限制条件&#xff1a;仅用于内联元素 display:inline 和 display: inline-block; 给容器添加样式 text-align:center<!DOCTYPE html> <html lang&q…...

【排序算法】基数排序

一&#xff1a;基本概念 1.1 基数排序(桶排序)介绍 基数排序&#xff08;radix sort&#xff09;属于“分配式排序”&#xff08;distribution sort&#xff09;&#xff0c;又称“桶子法”&#xff08;bucket sort&#xff09;或bin sort&#xff0c;顾名思义&#xff0c;它是…...

解释存储过程和函数的区别,以及它们在MySQL中的用途。如何创建和使用存储过程和函数?

解释存储过程和函数的区别&#xff0c;以及它们在MySQL中的用途。 存储过程和函数在MySQL中的区别及用途 区别&#xff1a; 返回值&#xff1a; 函数&#xff1a;必须有一个返回值&#xff0c;这可以是一个标量值或一个表。如果没有明确的RETURN语句&#xff0c;函数将返回N…...

【GPU驱动开发】-GPU架构简介

前言 不必害怕未知&#xff0c;无需恐惧犯错&#xff0c;做一个Creator&#xff01; GPU&#xff08;Graphics Processing Unit&#xff0c;图形处理单元&#xff09;是一种专门用于处理图形和并行计算的处理器。GPU系统架构通常包括硬件和软件层面的组件。 一、总体流程 应…...

m位数问题(c++题解)

题目描述 考官只给两个整数n和m&#xff08;1 < n < 8&#xff0c;1< m <5&#xff09;&#xff0c;要求选手从1,2,…,n中取出m个数字&#xff0c;组成一个m位整数&#xff0c;统计所有的m位整数中一共有多少个素数。 如n3,m2时&#xff0c;符合条件的整数有&…...

洛谷P1331海战

题目背景 在峰会期间&#xff0c;武装部队得处于高度戒备。警察将监视每一条大街&#xff0c;军队将保卫建筑物&#xff0c;领空将布满了 F-2003 飞机。 此外&#xff0c;巡洋船只和舰队将被派去保护海岸线。不幸的是&#xff0c;因为种种原因&#xff0c;国防海军部仅有很少…...

如何利用Flutter来写后端 服务端应用

前言 Flutter是谷歌推出的一款跨平台开发框架&#xff0c;现在属于此领域star最多的框架&#xff0c;其被广泛应用于构建前台界面&#xff0c;但或许很少人知道&#xff0c;他也可以写后端应用。 本文主角 flutter非常著名的getx库推出的get server jonataslaw/get_server:…...

数据页和缓存页(BufferPool)

1. 数据页&#xff08;dataPage&#xff09; 什么是数据页&#xff1f; 数据页是 MySQL 存储引擎在磁盘和内存之间传输数据的基本单位&#xff0c;默认大小为16KB。 数据页的结构&#xff1a; 表头&#xff1a;储存与页相关的元信息&#xff0c;比如&#xff0c;页号&#…...

LibreOJ 136. 最小瓶颈路 题解 最小生成树 倍增

题目链接&#xff1a;LibreOJ 136. 最小瓶颈路 题目描述&#xff1a; 给定一张无向图&#xff0c;询问两个结点之间的最小瓶颈路。u和v两个结点之间最小瓶颈路指的是u和v的每条路径中经过的最大边权的最小值。 题解&#xff1a; 给出结论&#xff1a;无向图的最小瓶颈路与其最小…...

前端学习第三天-css基础

1. CSS简介 从HTML被发明开始&#xff0c;样式就以各种形式存在。不同的浏览器结合它们各自的样式语言为用户提供页面效果的控制。最初的HTML只包含很少的显示属性。 随着HTML的成长&#xff0c;为了满足页面设计者的要求&#xff0c;HTML添加了很多显示功能。但是随着这些功能…...

各种使用chatgpt prompts技巧

1,利用chatgpt生成照片 1.1,从现在起, 当你想发送一张照片时,请使用 Markdown ,并且 不要有反斜线, 不要用代码块。使用 Unsplash API (https://source.unsplash.com/1280x720/? < PUT YOUR QUERY HERE >)。如果你明白了,请回复“明白” 1.2,开始提问生成指定场景照…...

基于单片机的企业指纹考勤系统设计

摘要: 考勤系统是企业人力资源管理的重要依据,传统的考勤系统不能保证准确性,也存在地域局限,不能满足一些跨区域集团公司的考勤要求。文章以单片机技术以及生物特征识别技术为基础,分析企业单片机智能化指纹考勤系统的设计思路,从硬件设备的选型和配置、软件系统的开发、…...

JUC(java.util.concuurrent)的常见类介绍

Java 并发包&#xff08;java.util.concurrent&#xff0c;简称 JUC&#xff09;提供了一系列的工具和框架&#xff0c;用于简化并发编程。以下是 JUC 包中常见类的介绍&#xff1a; Callable&#xff1a; Callable 接口是 Java 提供的一个带返回值的任务接口&#xff0c;类似于…...

从球谐到六边形:CSR Mascon产品的技术演进与实战指南

1. 为什么我们需要告别球谐系数&#xff1f; 十年前我刚接触GRACE数据时&#xff0c;球谐系数是唯一的选择。但第一次用它分析青藏高原水储量变化时&#xff0c;我遇到了令人崩溃的"条纹马赛克"——这就是著名的南北条带误差。球谐系数就像用乐高积木搭房子&#xff…...

AT6558R-5N32-00:多模卫星导航SOC芯片在智能穿戴与车载系统的低功耗设计解析

1. AT6558R芯片的核心技术解析 AT6558R-5N32-00这颗SOC芯片最让我惊艳的是它把射频前端、数字基带处理器、32位RISC CPU和电源管理全部集成在5x5mm的封装里。这就像把一整个导航接收机系统塞进了绿豆大小的空间&#xff0c;我在实际项目中用它替换传统方案时&#xff0c;PCB面积…...

不用装软件!这款MicroPython浏览器 IDE :让你在手机上也能调试树莓派 Pico酉

1、普通的insert into 如果&#xff08;主键/唯一建&#xff09;存在&#xff0c;则会报错 新需求&#xff1a;就算冲突也不报错&#xff0c;用其他处理逻辑 回到顶部 2、基本语法&#xff08;INSERT INTO ... ON CONFLICT (...) DO (UPDATE SET ...)/(NOTHING)&#xff09; 语…...

cv_unet_image-colorization快速部署:conda虚拟环境隔离最佳实践

cv_unet_image-colorization快速部署&#xff1a;conda虚拟环境隔离最佳实践 1. 项目概述 cv_unet_image-colorization 是一款基于 UNet 架构深度学习模型开发的本地化图像上色工具。这个工具采用了阿里魔搭开源的图像上色算法&#xff0c;能够精准识别黑白图像中的物体特征、…...

Qwen3-VL-WEBUI作品集:看AI如何理解复杂图片与长视频内容

Qwen3-VL-WEBUI作品集&#xff1a;看AI如何理解复杂图片与长视频内容 1. 引言&#xff1a;当AI开始"看懂"世界 想象一下&#xff0c;你给AI看一张满是文字的截图&#xff0c;它不仅能告诉你上面写了什么&#xff0c;还能分析出哪个是登录按钮、哪个是搜索框&#x…...

企业安全生产知识竞赛活动组织与实施指南

&#x1f6e1;️ 企业安全生产知识竞赛活动组织与实施指南&#x1f3af; 一、活动目标与意义核心目标&#xff1a;以赛促学、以学促安。通过趣味性竞赛&#xff0c;普及安全知识&#xff0c;检验培训成果&#xff0c;强化“安全第一、预防为主、综合治理”意识&#xff0c;营造…...

运维面试必问的10个K8s问题

在运维岗位的面试中&#xff0c;Kubernetes&#xff08;K8s&#xff09;作为容器编排的主流技术&#xff0c;常常是面试官重点考察的内容。以下是运维面试中可能会被问到的10个K8s相关问题及其详细解答&#xff0c;帮助你更好地准备面试。1. 请简要介绍一下Kubernetes及其核心功…...

安卓加固被破解怎么办?揭秘性能下降与源码泄露风险的真实原因

在选择安卓加固服务时&#xff0c;企业决策者最担心的几个问题往往是&#xff1a;花了钱&#xff0c;方案会不会很快被绕过&#xff1f;加固后&#xff0c;APP会不会变得又卡又慢甚至崩溃&#xff1f;把源码上传到云端加固&#xff0c;数据安全如何保障&#xff1f;这些并非杞人…...

嵌入式显示革命:如何用Adafruit_SH1106库征服OLED屏幕开发的三大挑战

嵌入式显示革命&#xff1a;如何用Adafruit_SH1106库征服OLED屏幕开发的三大挑战 【免费下载链接】Adafruit_SH1106 Adafruit graphic library for SH1106 dirver lcds. 项目地址: https://gitcode.com/gh_mirrors/ad/Adafruit_SH1106 你是否曾为嵌入式项目中的显示功能…...

BeeWare官方教程中文版:从零开始构建跨平台应用

1. 为什么选择BeeWare开发跨平台应用 第一次接触BeeWare时&#xff0c;我被它"一次编写&#xff0c;多端运行"的理念深深吸引。作为一个长期被平台兼容性问题困扰的开发者&#xff0c;终于找到了一个既能保持原生体验又能跨平台的解决方案。BeeWare最厉害的地方在于&…...