Q : Как передать несколько изображений из C ++ в Python?
Приведенный выше код использует REQ/REP
Масштабируемый образец формального шаблона связи, но он не пытается отправить и REP
-либо к любому уже доставленному REQ
-эст.
Без попытки .send()
a REP
-ly сторона REQ
никогда не сможет отправить любое следующее сообщение.
В случае, если это вашепервый опыт работы с ZeroMQ ,
, с которым вы можете в первый раз ознакомиться с " ZeroMQ Принципы менее чем за Пять секунд перед тем, как углубляться в детали
Решение?
Попробуйте использовать PUSH/PULL
Архетип, где ответ не требуется.
Далее, попытайтесь решить, является ли это разумно обоснованным предположением для отправки всех метаданных только с первым изображением (я бы лучше сочинил, лучше всего, используя struct.pack()/struct.unpack()
совместимый BLOB wвсе byte_rows, byte_cols, byte_mat_type, data
в каждом, однокадровом, тривиальном отображении полезных сообщений).
Сторона Python просто прочитает однокадровый BLOB за один шаг, при необходимости может проверить подпись .unpack()
первые несколько байтов, чтобы узнать размер изображения, .unpack()
"отдых" с данными изображения, и все готово. Разве это не мило?
Также предупреждаем, что не все платформы имеют одинаковый тип Endian-ness (поэтому лучше проектируйте код на стороне c с явным байтовым порядком в "network" -индийский порядок: o) просто для того, чтобы быть в безопасности, если хостинговые устройства / платформы развиваются дальше и могут стать другими Endian-ness в следующий раз. Явное упорядочение - это то же самое явное упорядочение, которое ваш код настаивал на использовании со дня 1)
Понятно. Итак, вы говорите, что я должен использовать PUSH / PULL, верно? но я изменил свою программу с ZMQ_REQ на ZMQ_XREQ на c ++ и с zmq.REP на zmq.XREQ на python. Затем я могу смотреть три окна в Python, но отображать только img0. Я знаю, что это произошло из-за sock.recv_multipart (). Но я не знаю, как это изменить. Также я должен реализовать с помощью PUSH / PULL? - user36327 7 часов назад
Нет, я никому не говорил, что ДОЛЖЕН использовать PUSH/PULL
, это был совет от парня, который используетZeroMQ начиная с v2.1 +
XREQ/XREP
эффективно замкнул ступеньку dFSA теоретически бесконечной цепочки REQ.send () s-REP.recv () s-REP. send () s-REQ.recv () s-REQ ...- REP ...- REP ...- REQ ...- REQ ...-...-
[... ad-бесконечность или тупик, в зависимости от того, что наступит раньше: o)]
Проблема в том, чтобы ожидать, что вещи обязательно произойдут, что на самом деле не должно происходить так, как ожидалось:
MASK = 'Python: The Image#{0:} was decoded to be {1:}'
order_ORDER = 0
while( True ): # THIS WILL RUN FOREVER, WON'T IT?
#####################################################################################
order_ORDER += 1
#####################################################################################
( byte_rows, # EXPECTS ALL THIS TO .recv() EACH TIME
byte_cols, # EXPECTS ALL THIS TO .recv() EACH TIME
byte_mat_type, # EXPECTS ALL THIS TO .recv() EACH TIME
data # EXPECTS ALL THIS TO .recv() EACH TIME
) = sock.recv_multipart() # in Data from C++ Program
#####################################################################################
rows = struct.unpack( 'i', byte_rows) # EXPECTS THIS TO BE CORRECT EACH TIME
cols = struct.unpack( 'i', byte_cols) # EXPECTS THIS TO BE CORRECT EACH TIME
mat_type = struct.unpack( 'i', byte_mat_type) # EXPECTS THIS TO BE CORRECT EACH TIME
#####################################################################################
if mat_type[0] == 0: # IF mat_type[0] WAS == 0 ?in 2nd, 3rd?
# # # # # # # # # # # # # # # Gray Scale: # IF mat_type[0] WAS == 0 ?in 2nd, 3rd?
image = np.frombuffer( data,
dtype = np.uint8
).reshape( ( rows[0],
cols[0]
)
)
print "IMAGE WAS of TYPE == ZERO, HAVING SHAPE OF: ", image.shape, image.dtype
imgType = 'Grayscale'
else: # IF mat_type[0] WAS != 0 ?in 2nd, 3rd?
# # # # # # # # # # # # # # # # BGR Color # IF mat_type[0] WAS != 0 ?in 2nd, 3rd?
image = np.frombuffer( data,
dtype = np.uint8
).reshape( ( rows[0],
cols[0],
3
)
)
print "IMAGE WAS of TYPE != ZERO, HAVING SHAPE OF: ", image.shape, image.dtype
imgType = 'Blue-Green-Red'
###################################################################################
cv2.imshow( MASK.format( imgType, order_ORDER ), image )
cv2.waitKey()
###################################################################################
# LOOP AGAIN
###################################################################################