繁体   English   中英

通过网络发送图像

[英]Send an image over a network

之前我已经问过一个问题,关于通过网络发送结构化数据,以及如何在服务器端处理这些数据。

我实际上想做的是通过网络从客户端(c ++ / Qt)向服务器端(python)发送图像。

双方都在使用OpenCV库

我发现了这些可以帮助我的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

我认为这不是发送(或编码)此图像的更好方法。 一些帮助 ?

编辑:我认为C ++和Python版本之间的OpenCV功能不兼容,并且图像在内存中的存储方式也不相同。 有人确认吗?

您可以使用多部分请求来避免编码/解码,它允许同时上传图像和键/值对。 在PHP中,通过$_FILES变量可以访问通过多部分请求上传的图像。 可以用QHttpMultiPart类实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM