gpt4 book ai didi

OpenCV C++ 将字节数组转换为 Mat

转载 作者:太空宇宙 更新时间:2023-11-03 21:58:34 26 4
gpt4 key购买 nike

如何将字节数组转换为从套接字接收到的 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];
}
}

我的接收器图像失真。我的代码有什么问题吗?提前致谢......

最佳答案

如果你有彩色图像,你可以用 3 个 uchar channel 在数学中读取它,所以更改这段代码:

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];
}
}

用这个:

int baseIndex = 0;
for (int i = 0; i < img.rows; i++) {
for (int j = 0; j < img.cols; j++) {
img.at<cv::Vec3b>(i,j) = cv::Vec3b(sockData[baseIndex + 0],
sockData[baseIndex + 1],
sockData[baseIndex + 2]);
baseIndex = baseIndex + 3;
}
}

也许这应该有效。

关于OpenCV C++ 将字节数组转换为 Mat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18573551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com