Opencv使用s从java发送mat到python

2024-09-27 00:11:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我在opencv中发现了许多通过socket从java发送mat到java或c++的例子,但是我不能让它在python上运行。在

服务器代码:

MatOfByte bytemat = new MatOfByte();
    Highgui.imencode(".jpg", out, bytemat);
    byte[] bytes = bytemat.toArray();
    r.write(String.valueOf(bytes.length));
    Log.d(TAG, String.valueOf(bytes.length));
    r.write(bytes);

python代码:

^{pr2}$

奇怪的是imdecode总是返回None。我就是不能让它工作。 PS:java客户机使用ObjectInputStream工作

----编辑---- 感谢大家的建议,我已经用预定义的字节替换了字节流,发现Java在发送字节时发送了一些头,因为它使用的是ObjectOutputStream。在

现在写入套接字的java代码是:

    DataOutputStream oos = null;
    try {
        oos = new DataOutputStream(os);
        oos.write(byteImage);
    } catch (Exception e) {
        Log.e(TAG, "Error while writing to OutputStream", e);
        cancel();
        setState(STATE_NONE, this.type);
    }

Tags: 代码lognewstring字节bytestagjava
2条回答

感谢大家的建议,我已经用预定义的字节替换了字节流,发现Java在发送字节时发送了一些头,因为它使用的是ObjectOutputStream。在

现在写入套接字的java代码是:

DataOutputStream oos = null;
        try {
            oos = new DataOutputStream(os);
            oos.write(byteImage);
        } catch (Exception e) {
            Log.e(TAG, "Error while writing to OutputStream", e);
            cancel();
            setState(STATE_NONE, this.type);
        }

现在可以了。剩下的唯一问题是颜色颠倒了。有没有关于如何再次反转它们的提示?在

尝试使用np.uint8(nparr)进行转换,如中所示:

frame = np.uint8(nparr)

这个例子起作用:

^{pr2}$

[编辑]如果是彩色图像,请记住OpenCV2图像是由RGB代替的,因此您可以使用

rgb = cv2.cvtColor(frame_in_bgr, cv2.COLOR_BGR2RGB)

enter image description here

相关问题 更多 >

    热门问题