簡體   English   中英

cv2不正確的圖像解碼

[英]cv2 incorrect image decode

我正在編程的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)顯示圖像給出了錯誤的結果: 示例輸出

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);
        }
    }
}

}

我解決了問題。 解決方案非常簡單:data = conn.recv(640 * 480 * 3)

640 * 480 * 3-圖像尺寸

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM