【问题标题】:cv2 incorrect image decodecv2 不正确的图像解码
【发布时间】:2017-06-09 23:26:55
【问题描述】:

我正在编写一个 Java 客户端,它将图像作为字节数组发送,而 Python 服务器则用于接收图像。接收到的图片高、宽、通道都对,

sock = socket.socket()
sock.bind(('localhost', 8080))
sock.listen(1)
print ("Listen")
conn, addr = sock.accept()

print('Start server')
while True:
    data = conn.recv(1024)
    if not data:
        break
    img = cv2.imdecode(np.fromstring(io.BytesIO(data).getvalue(), dtype=np.uint8), 1)
    np.save('snapshot.npy',img)
    exit()

使用cv2.imshow('img', img) 显示图像会产生不正确的结果:Example Output

Java端:

public class Client implements Runnable {

private Socket socket;
private DataOutputStream out;
private String server;
private int port;

private ArrayList<ResponseListener> listeners = new ArrayList<>();

public void addListener(ResponseListener responseListener){
    listeners.add(responseListener);
}

public void removeListeners(ResponseListener responseListener){
    listeners.remove(responseListener);
}

Client(String server, int port) {
    this.server = server;
    this.port = port;
}

public void start(){
    while(socket==null){
        try {
            socket = new Socket(server, port);
            socket.setTcpNoDelay(true);
            System.out.println("Ready");
            listeners.forEach((listener)->listener.serverIsReady());
        } catch (Exception ex) {
            System.out.println("In thread " + ex.toString());
        }
    }
}

public void send(byte[] img) throws IOException {
    out.write(img);
}

@Override
public void run() {

    InputStreamReader in = null;
    try {
        in = new InputStreamReader(socket.getInputStream());
        System.out.println(in);
        out = new DataOutputStream(socket.getOutputStream());
    } catch (IOException e) {
        System.out.println("in or out failed");
        System.exit(-1);
    }
    int count = 0;
    while (true) {
        try {
            int line = in.read();
            count++;
            if(count==4) {
                listeners.forEach((listener)->listener.onSignDefined(String.valueOf(line)));
                count=0;
            }
        } catch (Exception e) {
            System.out.println("In loop " + e.toString());
            System.exit(-1);
        }
    }
}

}

【问题讨论】:

  • 您的问题也可能出在 Java 方面。考虑发布有关 Java 客户端的更多详细信息。
  • 字节数组是否
  • 你做了什么来测试这个?也许编写一个向它发送图像的python客户端不会那么难?
  • 在 java 端,我从 ip 摄像头接收字节。 Java 代码可以正常接收,因为 gui 上的图像看起来不错 byte[] img = controler.getSnapshot(); nputStream in = new ByteArrayInputStream(img); Image image = new Image(in);
  • 你做了什么来测试这个?从java保存图像然后查看java发送的内容怎么样?

标签: python opencv socket.io cv2


【解决方案1】:

我解决了问题。解决方案非常简单: 数据 = conn.recv(640*480*3)

640*480*3 - 图片尺寸

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 2021-08-21
    • 2021-03-24
    • 2018-02-07
    • 2019-07-18
    • 2022-07-12
    • 1970-01-01
    相关资源
    最近更新 更多