cuốn sách gpt4 ai đã làm

OpenCV C++ chuyển đổi mảng byte thành Mat

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 21:58:34 26 4
mua khóa gpt4 Nike

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......

câu trả lời hay nhất

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ả.

Về việc chuyển đổi mảng byte OpenCV C++ sang Mat, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/18573551/

26 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress