2016-06-26 8 views
0

Ich brauche das Bild mit RabbitMQ und dem einzigen Weg zu schicken ich gefunden ist:Wie kann ich ein einfaches Bild von der Festplatte in eine OpenCV-Matten-Datei konvertieren?

f = open("asd.jpg","rb") 
img = f.read() 
f.close() 

als ich die img senden kann.

Ich möchte das gesendete Bild verarbeiten, wo ich es erhalten habe, also wie kann ich es in eine OpenCV-Matten-Datei konvertieren?

Hier ist, wie ich die Datei erhalten:

def callback(ch, method, properties, body): 
    print "Recieved" 
    cv2.imshow('Message', body) 
    cv2.waitKey(0) 

Send.py:

import pika 
import cv2 

img = cv2.imread('asd.jpg') 

#Establish connection 
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) 
channel = connection.channel() 

channel.exchange_declare(exchange='image_exch', type='fanout') 

channel.basic_publish(exchange='image_exch', routing_key='', body=img) 

print "[*] Sent" 

connection.close() 

Receive.py:

import pika 
import cv2 

#Establish connection 
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) 
channel = connection.channel() 

channel.exchange_declare(exchange='image_exch', type='fanout') 
result = channel.queue_declare(exclusive=True) 
queue_name = result.method.queue 

channel.queue_bind(exchange='image_exch', queue=queue_name) 

def callback(ch, method, properties, body): 
    print "Recieved" 
    cv2.imshow('Message', body) 
    cv2.waitKey(0) 

channel.basic_consume(callback, queue=queue_name, no_ack=True) 
print(' [*] Waiting for messages. To exit press CTRL+C') 
channel.start_consuming() 
+0

Warum lesen Sie nicht einfach das Bild mit opencv? Es wird als ein numpliges Array gelesen. –

+0

Also zuerst muss ich es speichern und dann nochmal mit openCV lesen? Oder ich verstehe es nicht. – Gabe

+0

Überprüfen Sie meine Antwort. –

Antwort

0

So nach ein paar Versuchen Ich schaffte es, lösen mein Problem.

Dies ist, wie ich es tat:

#Read the image as binary 
f = open("picture.jpg","rb") 
rawImg= f.read() 
f.close() 

#Convert the raw image to a numpy array for further processing 
npImage = np.fromstring(rawImg, dtype='uint8') 
#Convert the numpy array to an OpenCV image type 
img = cv2.imdecode(npImage, cv2.IMREAD_UNCHANGED) 
cv2.imshow('Recieved message', img) 
cv2.waitKey(0) 

Und das funktioniert perfekt mit RabbitMQ und OpenCV. Lies einfach das Bild als Binärdatei mit dem Absender-Skript und sende es dann. Nachdem Sie die Nachricht erhalten haben, konvertieren Sie sie einfach und Sie sind fertig.