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
提供兩個范例,
- 使用numpy計算兩個矩陣的乘積。
- 使用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/
📢這位道友請留步??,我觀你氣度不凡,談吐間隱隱有王者霸氣💚,日后定有一番大作為📝!!!旁邊有點贊👍收藏🌟今日傳你,點了吧,未來你成功??,我分文不取,若不成功??,也好回來找我。
溫馨提示:點擊下方卡片獲取更多意想不到的資源。