QT5 QTcpsocket QDataStream发送Mat图片
时间: 2023-11-26 21:03:18 浏览: 156
将OpenCV的Mat类型数据发送给另一台机器,可以先将Mat类型数据转换成QImage或QPixmap,然后再用QDataStream进行传输。以下是一个示例代码:
```c++
QTcpSocket* socket = new QTcpSocket(this);
socket->connectToHost("127.0.0.1", 1234);
cv::Mat matImage = cv::imread("test.jpg"); //加载图片
QImage image = QImage(matImage.data, matImage.cols, matImage.rows, matImage.step, QImage::Format_RGB888); //将Mat类型数据转换成QImage类型
QByteArray imageData;
QDataStream stream(&imageData, QIODevice::WriteOnly);
stream << image; //将图片数据写入到QByteArray类型的数据流中
socket->write(imageData); //发送数据
```
在接收端,可以使用QDataStream的readBytes()函数来读取数据,并将接收到的QByteArray类型的数据转换为QImage类型,然后再将QImage类型的数据转换成Mat类型的数据。具体代码如下:
```c++
QTcpSocket* socket = qobject_cast<QTcpSocket*>(sender());
if (socket) {
QByteArray imageData;
QDataStream stream(socket);
qint64 bytes = socket->bytesAvailable();
imageData.resize(bytes);
stream.readBytes(imageData.data(), bytes); //读取数据
QImage image;
stream >> image; //将QByteArray类型的数据流转换为QImage类型
cv::Mat matImage(image.height(), image.width(), CV_8UC3, image.bits(), image.bytesPerLine()); //将QImage类型数据转换成Mat类型数据
//处理Mat类型数据
}
```
需要注意的是,Mat类型数据的格式可能不是RGB888,具体格式要根据实际情况而定,如果不是RGB888格式,则需要进行格式转换。
阅读全文