前提・実現したいこと
cv2とsocketでwebカメラから撮った動画をライブ中継したい。
発生している問題・エラーメッセージ
###ValueError: cannot reshape array of size 65495 into shape (480,640,3)
普段使っているときは問題ないのですが、カメラに指を近づけたり、急に離したりするとエラーが出ます。
あと、sizeはその時ごとに変わります。
該当のソースコード
###server.py
import socket
import numpy as np
import cv2
import time
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#ソケットオブジェクト作成
s.bind(("192.168.0.14", 6666)) # サーバー側PCのipと使用するポート
print("接続待機中")
s.listen(1) # 接続要求を待機
soc, addr = s.accept() # 要求が来るまでブロック
print(str(addr)+"と接続完了")
cam = cv2.VideoCapture(0)#カメラオブジェクト作成
while (True):
flag,img = cam.read() #カメラから画像データを受け取る img = img.tostring() #numpy行列からバイトデータに変換 soc.send(img) # ソケットにデータを送信 k = cv2.waitKey(1) #↖ if k== 13 : #← ENTERキーで終了 break #↙
cam.releace() #カメラオブジェクト破棄
###client.py
import socket
import numpy as np
import cv2
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#ソケットオブジェクト作成
soc.connect(("192.168.0.14", 6666))#サーバー側のipと使用するポート(ポートはサーバーと同じにする。)
print("接続完了")
while(1):
data = soc.recv(921600)
data = np.frombuffer(data,dtype=np.uint8)#バイトデータ→ndarray変換
data = np.reshape(data,(480,640,3))#形状復元
cv2.imshow("",data);
k = cv2.waitKey(1)
if k== 13 :
break
cv2.destroyAllWindows() # 作成したウィンドウを破棄
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/23 21:32
2020/02/24 02:08