【发布时间】:2018-11-04 05:10:16
【问题描述】:
如何将字节数组转换为从套接字接收的 Mat ?。
我的客户端应用程序会像这样发送彩色图像数据
Mat frame; //colour image
int imgSize = frame.total()*frame.elemSize();
int bytes = send(clientSock, frame.data, imgSize, 0));//write to the socket
服务器会收到类似的数据
char sockData[imgSize];
Mat img;
for (int i = 0; i < imgSize; i += bytes) {
bytes = recv(connectSock, sockData +i, imgSize - i, 0));
}
// Write to mat
for (int i = 0; i < img.rows; i++) {
for (int j = 0; j < img.cols; j++) {
(img.row(i)).col(j) = (uchar)sockData[((img.cols)*i)+j];
}
}
接收器的图像失真。我的代码有什么问题吗? 提前谢谢.......
【问题讨论】:
-
为什么 sockData 是一个 char 数组而不是 uchar?
-
为什么不使用 cv::Mat::at
(x,y) 方法?请记住,x 是从左到右的列,y 是从上到下的行 -
如果图像是彩色的 -> CV_8UC3 每个像素都有 3 个 8 位通道
标签: opencv