Làm cách nào để chuyển đổi mảng byte thành Mat nhận được từ ổ cắm?
Ứng dụng khách của tôi sẽ gửi dữ liệu hình ảnh màu như thế này
Khung chiếu; //ảnh màu
int imgSize = frame.total()*frame.elemSize();
int byte = send(clientSock, frame.data, imgSize, 0));//ghi vào socket
Sau đó server sẽ nhận được dữ liệu như thế này
char sockData[imgSize];
Mat img;
for (int i = 0; i < imgSize; i += byte) {
byte = recv(connectSock, sockData +i, imgSize - i, 0));
}
// Ghi vào 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];
}
}
Hình ảnh máy thu của tôi bị méo. Có điều gì sai với mã của tôi không? Cảm ơn trước......
Nếu bạn có hình ảnh màu, bạn có thể đọc nó trong toán học bằng 3 kênh uchar, vì vậy hãy thay đổi mã này:
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];
}
}
Sử dụng cái này:
int base Index = 0;
for (int i = 0; i < img.rows; i++) {
for (int j = 0; j < img.cols; j++) {
img.at(i,j) = cv::Vec3b(sockData[baseIndex + 0],
sockData[baseIndex + 1],
sockData[baseIndex + 2]);
baseIndex = baseIndex + 3;
}
}
Có lẽ điều này sẽ hiệu quả.
Tôi là một lập trình viên xuất sắc, rất giỏi!