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/
📢這位道友請留步??,我觀你氣度不凡,談吐間隱隱有王者霸氣💚,日后定有一番大作為📝!!!旁邊有點贊👍收藏🌟今日傳你,點了吧,未來你成功??,我分文不取,若不成功??,也好回來找我。

溫馨提示點擊下方卡片獲取更多意想不到的資源。
空名先生

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/713688.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713688.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713688.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringBoot源碼解讀與原理分析(三十八)SpringBoot整合WebFlux(一)WebFlux的自動裝配

文章目錄 前言第13章 SpringBoot整合WebFlux13.1 響應式編程與Reactor13.1.1 命令式與響應式13.1.2 異步非阻塞13.1.3 觀察者模式13.1.4 響應性13.1.5 響應式流13.1.6 背壓13.1.7 Reactor13.1.7.1 Publisher13.1.7.2 Subscriber13.1.7.3 Subscription13.1.7.4 Processor13.1.7.…

BF算法實現(Python,C++)

BF算法&#xff0c;即暴力(Brute Force)算法&#xff0c;是普通的模式匹配算法&#xff0c;BF算法的思想就是將目標串S的第一個字符與模式串T的第一個字符進行匹配&#xff0c;若相等&#xff0c;則繼續比較S的第二個字符和 T的第二個字符&#xff1b;若不相等&#xff0c;則比…

Leetcoder Day32| 貪心算法part05

763.劃分字母區間 字符串 S 由小寫字母組成。我們要把這個字符串劃分為盡可能多的片段&#xff0c;同一字母最多出現在一個片段中。返回一個表示每個字符串片段的長度的列表。 示例&#xff1a; 輸入&#xff1a;S "ababcbacadefegdehijhklij"輸出&#xff1a;[9,7…

今日早報 每日精選15條新聞簡報 每天一分鐘 知曉天下事 3月2日,星期六

每天一分鐘&#xff0c;知曉天下事&#xff01; 2024年3月2日 星期六 農歷正月廿二 1、 氣象局&#xff1a;3月份仍有5次冷空氣影響我國&#xff1b;全國多地或提前入春。 2、 央行&#xff1a;將外籍來華人員移動支付單筆交易限額由1000美元提高到5000美元。 3、 神舟十七號航…

全量知識系統問題及SmartChat給出的答復 之8 三套工具之3語法解析器 之1

Q19. 問題 : 解釋單詞解釋單詞occupied 的字典條目 (word-def occupiedinterest 5type EBsubclass SEBtemplate (script $Demonstrateactor nilobject nildemands nilmethod (scene $Occupyactor nillocation nil))fill (((actor) (top-of *actor-s…

【源碼】imx6ull實現觸摸屏單點實驗

一、本實驗實驗的器材&#xff1a; 1.正點原子imx6ull的阿爾法開發板v2.2 2.屏幕ALIENTEK 4.3 RGBLCD 二、實驗已經移植好的文件&#xff1a; 倉庫代碼&#xff1a;https://gitee.com/wangyoujie11/atkboard_-linux_-driver.git 1.文件說明 23_multitouch &#xff1a;驅動代…

aws平臺的ec2實例 GNU/Linux系統安裝docker流程

在AWS EC2實例上安裝Docker的流程與其他GNU/Linux系統基本相同。以下是在AWS EC2實例上安裝Docker的一般步驟&#xff1a; 登錄到AWS EC2實例&#xff1a; 使用SSH或者其他遠程登錄方式登錄到你的GNU/Linux實例。 更新系統包管理器&#xff1a; 對于基于Amazon Linux的系統&am…

常見Prometheus exporter部署

常見Prometheus exporter部署 Prometheus部署Node exporterProcess exporterRedis exporterMySQL exporterOracleDB exporter Prometheus部署 本地部署&#xff1a; wget https://github.com/prometheus/prometheus/releases/download/v*/prometheus-*.*-amd64.tar.gz tar xv…

java的jar打包docker鏡像,啟動加載

測試環境&#xff0c;打包鏡像 1,把jar包復制/data/liu/mssda.jar, cd到這個目錄下 2&#xff0c;創建Dockerfile文件&#xff0c;jdk17版本&#xff0c;內容如下 jdk8版本 FROM openjdk:8-jre-alpine WORKDIR /app COPY . /app CMD ["java", "-jar",…

最大奇約數(c++題解)

內存限制&#xff1a; 128 MiB時間限制&#xff1a; 100 ms標準輸入輸出題目類型&#xff1a; 傳統評測方式&#xff1a; 文本比較 題目描述 定義函數f(x)表示x的最大奇約數&#xff0c;這里x表示正整數。例如&#xff0c;f(20) 5&#xff0c;因為20的約數從小到大分別有&am…

奧地利羅馬尼亞媒體宣發稿對跨境出海推廣新聞營銷的意義

【本篇由言同數字科技有限公司原創】在當今全球化的時代&#xff0c;品牌跨境海外推廣已成為企業拓展國際市場的必要途徑。而奧地利和羅馬尼亞是歐洲重要的市場之一&#xff0c;通過在當地媒體上發表文章&#xff0c;可以幫助品牌成功打入這兩個市場&#xff0c;獲得更多的機會…

【YOLO v5 v7 v8 小目標改進】ODConv:在卷積核所有維度(數量、空間、輸入、輸出)上應用注意力機制來優化傳統動態卷積

ODConv&#xff1a;在卷積核所有維度&#xff08;數量、空間、輸入、輸出&#xff09;上應用注意力機制來優化傳統的動態卷積 提出背景傳統動態卷積全維動態卷積效果 小目標漲點YOLO v5 魔改YOLO v7 魔改YOLO v8 魔改 論文&#xff1a;https://openreview.net/pdf?idDmpCfq6Mg…

leedcode刷題--day7(字符串)

23 文章講解 力扣地址 C class Solution { public:void reverseString(vector<char>& s) {int left 0;int right s.size() - 1; // right 應該初始化為 s.size() - 1while (left < right) {swap(s[left], s[right]); // 直接交換 s[left] 和 s[right] 的值lef…

(學習日記)2024.02.29:UCOSIII第二節

寫在前面&#xff1a; 由于時間的不足與學習的碎片化&#xff0c;寫博客變得有些奢侈。 但是對于記錄學習&#xff08;忘了以后能快速復習&#xff09;的渴望一天天變得強烈。 既然如此 不如以天為單位&#xff0c;以時間為順序&#xff0c;僅僅將博客當做一個知識學習的目錄&a…

WSL2外部網絡設置

1 關閉所有WSL系統 wsl --shutdown 2 打開Hyper-V管理器 3 將“虛擬交換機管理器”-> ”WSL連接類型“設置為“外部網絡” 4 啟動WSL系統&#xff0c;手動修改WSL網絡 將WSL網絡IP修改為192.168.1.9 sudo ip addr del $(ip addr show eth0 | grep inet\b | awk {print $2} |…

FFmpeg+OpenCV開發案例匯總

桌面共享工具&#xff08;軟編版&#xff09; 桌面共享工具&#xff08;DXGI硬編版&#xff09; 智能廣告大屏&#xff08;可疊加透明廣告&#xff09; Android手機屏幕RTMP推流工具&#xff08;推麥克風版&#xff09; Android手機屏幕RTMP推流工具&#xff08;推揚聲器版…

FinalMLP:用于推薦系統的簡單但強大的雙流 MLP 模型

原文地址&#xff1a;FinalMLP: A Simple yet Powerful Two-Stream MLP Model for Recommendation Systems 了解 FinalMLP 如何轉變在線推薦&#xff1a;通過尖端 AI 研究解鎖個性化體驗 2024 年 2 月 14 日 介紹 世界正在向數字時代發展&#xff0c;在這個時代&#xff0c;…

Python并發編程:多線程-死鎖現象與遞歸鎖

一  死鎖現象 所謂死鎖&#xff1a;是指兩個或兩個以上的進程或線程在執行過程中&#xff0c;因爭奪資源而造成的一種互相等待的現象&#xff0c;若無外力作用&#xff0c;它們都將無法推進下去。此時稱系統處于死鎖狀態或系統產生了死鎖&#xff0c;這些永遠在互相等待的進程…

持安科技孫維伯:零信任在攻防演練下的最佳實踐|DISCConf 2023

近日&#xff0c;在2023數字身份安全技術大會上&#xff0c;持安科技聯合創始人孫維伯應主辦方的特別邀請&#xff0c;發表了主題為“零信任在攻防演練下的最佳實踐”的演講。 孫維伯在2023數字身份安全技術大會上發表演講 以下為本次演講實錄&#xff1a; 我是持安科技的聯合…

【c++】 STL的組件簡介與容器的使用時機

STL六大組件簡介 STL提供了六大組件&#xff0c;彼此之間可以組合套用&#xff0c;這六大組件分別是:容器、算法、迭代器、仿函數、適配器&#xff08;配接器&#xff09;、空間配置器。 容器&#xff1a;各種數據結構&#xff0c;如vector、list、deque、set、map等,用來存放…