使用 Chaquopy 将 python 中的 PyObject 转换为 android 中的多个二维数组
converting a PyObject in python to multiple 2d arrays in android using Chaquopy
这是我的 python 脚本:
import cv2
import numpy as np
import copy
import imutils
def test(red,green,blue):
mask = np.zeros((480,360,3),dtype=np.uint8)
for i in range(0,360):
for j in range(0,480):
a=blue[i][j]
b=green[i][j]
c=red[i][j]
mask[j,i]=(110,23,245);
mask[0:480,0:360]=(110,23,245)
cv2.rectangle(mask, (100,100), (200,200), (255, 255, 255), -1)
b, g, r = cv2.split(mask)
return b,g,r
现在在 mainactivity.java 中 android 它是通过创建一个 pyObject 接收的,但是 python 函数 returns 3 ,2 维数组作为元组,我需要转换这个 pyObject 到 3 ,2dimensional java array
Python py=Python.getInstance();
PyObject pyf =py.getModule("hello");
PyObject obj=pyf.callAttr("test", red,green,blue);
int[][] data = pyf.callAttr("test", red,green,blue).toJava(int[][].class);
但是如您所见,如果我的 python 函数返回 1 ,2d 列表,我可以将其转换为 java 二维数组,但是当它 returns 3 , 2d 时该怎么办数组 ?
您可以向 Java 数据类型添加另一个维度:
int[][][] data = pyf.callAttr("test", red,green,blue).toJava(int[][][].class);
现在 data[0]
是 b
,data[1]
是 g
,data[2]
是 r
。
这是我的 python 脚本:
import cv2
import numpy as np
import copy
import imutils
def test(red,green,blue):
mask = np.zeros((480,360,3),dtype=np.uint8)
for i in range(0,360):
for j in range(0,480):
a=blue[i][j]
b=green[i][j]
c=red[i][j]
mask[j,i]=(110,23,245);
mask[0:480,0:360]=(110,23,245)
cv2.rectangle(mask, (100,100), (200,200), (255, 255, 255), -1)
b, g, r = cv2.split(mask)
return b,g,r
现在在 mainactivity.java 中 android 它是通过创建一个 pyObject 接收的,但是 python 函数 returns 3 ,2 维数组作为元组,我需要转换这个 pyObject 到 3 ,2dimensional java array
Python py=Python.getInstance();
PyObject pyf =py.getModule("hello");
PyObject obj=pyf.callAttr("test", red,green,blue);
int[][] data = pyf.callAttr("test", red,green,blue).toJava(int[][].class);
但是如您所见,如果我的 python 函数返回 1 ,2d 列表,我可以将其转换为 java 二维数组,但是当它 returns 3 , 2d 时该怎么办数组 ?
您可以向 Java 数据类型添加另一个维度:
int[][][] data = pyf.callAttr("test", red,green,blue).toJava(int[][][].class);
现在 data[0]
是 b
,data[1]
是 g
,data[2]
是 r
。