Tôi đang làm việc với Kinect và OpenCV. Tôi đã tìm kiếm trong diễn đàn này nhưng tôi không tìm thấy bất cứ điều gì giống như vấn đề của tôi. tôi giữ cho dữ liệu sâu liệu từ Kinect (16 bit), tôi lưu nó trong một CvMat * và sau đó tôi vượt qua nó để cvGetImage để tạo ra một IplImage * từ nó:Chuyển đổi độ sâu 16 bit CvMat * sang độ sâu 8 bit
CvMat* depthMetersMat = cvCreateMat(480, 640, CV_16UC1);
[...]
cvGetImage(depthMetersMat,temp);
Nhưng bây giờ tôi cần phải làm việc trên hình ảnh này để làm cvThreshdold và tìm đường nét. Hai chức năng này cần một hình ảnh có độ sâu 8 bit ở đầu vào. Làm thế nào tôi có thể chuyển đổi CvMat * depthMetersMat trong 8-bit-depth-CvMat *?
Điều gì có nghĩa là "Quy mô giá trị"? – Maystro
@Maystro, số 16 bit chưa ký có thể có giá trị bất kỳ ở đâu từ 0 đến 65,535, nhưng chúng tôi cần giá trị để vừa với số 8 bit, chỉ có thể giữ giá trị từ 0 đến 255. Vì vậy, chúng tôi áp dụng hệ số tỷ lệ , điều đó có nghĩa là bạn nhân mỗi giá trị với hằng số, trong trường hợp này là 0,00390625. Bất kỳ số nào trong ma trận gốc có giá trị 0 đến 255 nhận giá trị mới là 0, 256 đến 511 trở thành 1, 512 đến 767 trở thành 2, v.v. – Gillfish
Vì vậy, nó giống như m2.convertTo (m2/256, CV_8U) đúng? Một câu hỏi khác, nếu chúng ta không vượt qua một tham số yếu tố tỷ lệ thì sao? nó sẽ được tính như thế nào? – Maystro