如何将 opencv Mat 转换为 numpy.ndarray?
How to convert an opencv Mat into a numpy.ndarray?
我有一个用 java (android) 编写的代码,可以打开 phone 的相机并显示帧。下面的代码表示我们可以检索帧的方法。该项目使用 Chaquopy 来解释 python 代码。
@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"
我通过在 java 端将 Mat 转换为 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]))
希望对您有所帮助。
我有一个用 java (android) 编写的代码,可以打开 phone 的相机并显示帧。下面的代码表示我们可以检索帧的方法。该项目使用 Chaquopy 来解释 python 代码。
@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"
我通过在 java 端将 Mat 转换为 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]))
希望对您有所帮助。