Python 如何将opencv Mat转换为numpy.ndarray?
我有一个用java(android)编写的代码,可以打开手机摄像头并显示画面。下面的代码表示我们可以检索帧的方法。该项目使用Chaquopy来解释python代码Python 如何将opencv Mat转换为numpy.ndarray?,python,numpy-ndarray,chaquopy,Python,Numpy Ndarray,Chaquopy,我有一个用java(android)编写的代码,可以打开手机摄像头并显示画面。下面的代码表示我们可以检索帧的方法。该项目使用Chaquopy来解释python代码 @Override public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) { mRgba = inputFrame.rgba(); Python py = Python.getInstance(
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
mRgba = inputFrame.rgba();
Python py = Python.getInstance();
PyObject pym = (PyObject)
py.getModule("MyPythonClass").callAttr("call",mRgba);
return mRgba;
}
python代码用于检索帧(由“mRgba”表示,它是java代码中的Mat)以进行进一步处理
问题在于找到一种解决方案,将此Mat转换为可由python代码解释的类型:
def call(frame):
im = imutils.resize(frame, width=min(300, frame.shape[1]))
“frame”应该是java代码检索到的Mat,并发送到函数“call”我通过将Mat转换为java端的byteArray找到了解决方案
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
byteArray = byteArrayOutputStream .toByteArray();
在python端,检索到的byteArray被转换为PIL图像,然后转换为numpy数组:
def call(imp):
pic = Image.open(io.BytesIO(bytes(imp)))
open_cv_image = np.array(pic)
# Convert RGB to BGR
frame = open_cv_image[:, :, ::-1].copy()
im = imutils.resize(frame, width=min(300, frame.shape[1]))
希望这能有所帮助