Tóm lại, tôi muốn biết liệu có thể truy cập trực tiếp giá trị pixel của CV_32F Mat, thông qua thành viên Mat "dữ liệu uchar *" hay không.OpenCV C++: cách truy cập giá trị pixel CV_32F qua con trỏ dữ liệu uchar
tôi có thể làm điều đó với không có vấn đề nếu Mat là CV_8U, ví dụ:
// a matrix 5 columns and 6 rows, values in [0,255], all elements initialised at 12
cv:Mat A;
A.create(5,6, CV_8UC1);
A = cv::Scalar(12);
//here I successfully access to pixel [4,5]
uchar *p = A.data;
int value = (uchar) p[4*A.step + 5];
Vấn đề là khi tôi cố gắng để làm các hoạt động cùng với các ma trận sau,
// a matrix 5 columns, 6 rows, values in [0.0, 1.0], all elements initialised at 1.2
cv::Mat B;
B.create(5,6, CV_32FC1);
B = cv::Scalar(1.2);
//this clearly does not work, no syntax error but erroneous value reported!
uchar *p = B.data;
float value = (float) p[4*B.step + 5];
//this works, but it is not what I want to do!
float value = B.at<float>(4,5);
Cảm ơn rất nhiều, Valerio
Có bất kỳ lý do nào không sử dụng 'float * p = B.data'; – William
mmm không, bạn không thể làm điều này! B.data là một con trỏ đến uchar! Đây là một thành viên dữ liệu trong Mat! –
oups. lấy làm tiếc. tôi vội vã bình luận. nhân tiện. bỏ phiếu cho các câu trả lời bạn thích và chấp nhận câu trả lời có hiệu quả. – William