C++ 通过QTsokect获取一百三十万像素的图片,并用cv::mat保存下来
时间: 2024-04-12 12:31:08 浏览: 95
您好!您可以使用QT的QImage类来获取图片,并将其转换为OpenCV的cv::Mat格式来保存。下面是一个示例代码:
```cpp
#include <QApplication>
#include <QTcpSocket>
#include <QImage>
#include <QBuffer>
#include <opencv2/opencv.hpp>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
// 创建QTcpSocket对象,并连接到服务器
QTcpSocket socket;
socket.connectToHost("服务器地址", 1234);
if (!socket.waitForConnected()) {
qDebug() << "无法连接到服务器";
return -1;
}
// 接收图片数据
QByteArray imageData;
while (imageData.size() < 1300000) {
if (!socket.waitForReadyRead()) {
qDebug() << "接收数据超时";
return -1;
}
imageData.append(socket.readAll());
}
// 将接收到的数据转换为QImage
QImage image;
image.loadFromData(imageData);
// 将QImage转换为cv::Mat
cv::Mat cvImage(image.height(), image.width(), CV_8UC3, image.bits(), image.bytesPerLine());
// 保存图像
cv::imwrite("image.jpg", cvImage);
return app.exec();
}
```
请注意,您需要将"服务器地址"替换为实际的服务器地址,并确保服务器以某种方式提供图像数据。此示例假设服务器将图像数据通过TCP连接发送,并且数据以JPEG格式发送。
阅读全文