Я пытаюсь закодировать изображение, прочитанное на python, с помощью OpenCV, чтобы я мог отправить его через очередь сообщений (ZeroMQ) и декодировать его в c #. Вот питон, который я использую для сбора изображений
cap = cv2.VideoCapture(0)
while True:
retval, img = cap.read()
Мне нужно закодировать img в строку, которую можно декодировать в c #, в объект BitmapData. Я пробовал это до сих пор.
Python
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind('tcp://127.0.0.1:12345')
cap = cv2.VideoCapture(0)
while True:
retval, img = cap.read()
#cv2.imshow('Webcam', img)
#cv2.waitKey(1)
retval, buffer = cv2.imencode('.png', img)
buffer = bytearray(buffer)
buffer = buffer.decode('utf-8', 'ignore')
print(buffer[25:50])
payload = {}
payload['message'] = buffer
payload['originatingTime'] = datetime.datetime.now().isoformat()
socket.send_multipart(['cozmo.img'.encode(), json.dumps(payload).encode('utf-8')])
с #
using (Pipeline pipeline = Pipeline.Create())
{
var mq = new NetMQSource<string>(pipeline, "cozmo.img", "tcp://localhost:12345", JsonFormat.Instance);
IProducer<Microsoft.Psi.Imaging.Image> imgStream = mq.Select(x => {
Console.WriteLine(x);
byte[] imgData = Encoding.ASCII.GetBytes(x);
Bitmap bmp;
var ms = new MemoryStream(imgData);
bmp = new Bitmap(ms);
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
System.Drawing.Imaging.BitmapData bmpData =
bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite,
bmp.PixelFormat);
Microsoft.Psi.Imaging.Image img = new Microsoft.Psi.Imaging.Image(bmpData);
Console.WriteLine(img.Width + " " + img.Height);
//byte[] data = ;
return img;
});
pipeline.RunAsync();
Console.ReadKey();
}