我已经问过a question before关于通过网络发送结构化数据,以及如何在服务器端处理这些数据。
我真正试图做的是通过网络从客户端(c ++ / Qt)向服务器端(python)发送图像。
双方正在使用OpenCV library
我发现这些可以帮助我的OpenCV功能:cv::imencode()
,cv::imdecode()
发送部分(客户端):
cv::Mat img = cv::imread("lena.png")
vector<uchar> buf;
cv::imencode( ".png", img, buf );
// rawImage: the data that are supposed to be sended and decoded with cv2.imdecode()
QByteArray rawImage = QByteArray( (const char *) buf.data(), buf.size() );
// construct paquet
QByteArray sep = QByteArray();
sep.append( "<break>" );
QByteArray paquet;
paquet.append( _token );
paquet.append( sep );
paquet.append( query );
paquet.append( sep );
paquet.append( QJsonDocument( jsonObject ).toJson( QJsonDocument::Compact ) );
paquet.append( sep );
paquet.append( rawImage );
write( paquet );
接收部分(服务器端)
# get the data here...
lines = data.split( '<break>' )
raw = lines[3]
img = cv2.imdecode( raw, cv2.CV_LOAD_IMAGE_COLOR )
# process img ...
我发现了这个错误:
...
img = cv2.imdecode( raw, cv2.CV_LOAD_IMAGE_COLOR )
exceptions.TypeError: buf is not a numpy array, neither a scalar
我认为这不是发送(或编码)此图像的更好方法。一些帮助?
修改 我认为OpenCV功能在C ++和Python版本之间不兼容,并且图像在内存中的存储方式不同。有人要确认吗?
答案 0 :(得分:0)
您可以使用多部分请求来避免编码/解码,它允许同时上传图像和键/值对。在PHP中,可以通过$_FILES
变量访问通过多部分请求上传的图像。可以使用QHttpMultiPart
类实现。