Krótko mówiąc, chciałbym wiedzieć, czy możliwy jest bezpośredni dostęp do wartości pikseli maty CV_32F, za pośrednictwem elementu macie "uchar * data".OpenCV C++: jak uzyskać dostęp do wartości pikseli CV_32F przez wskaźnik danych ucharowych
mogę to zrobić bez problemu, jeśli Mat to CV_8U, na przykład:
// 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];
Problem jest, gdy próbuję wykonać tę samą operację z następującą matrycą,
// 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);
Dzięki dużo, Valerio
Czy istnieje jakikolwiek powód, aby nie używać 'float * p = B.data'; – William
mmm nie, nie możesz tego zrobić! B.data jest wskaźnikiem do uchar! To jest członek danych w Mat! –
oups. Przepraszam. rzuciłem się, by skomentować. tak poza tym. zagłosuj na odpowiedzi, które Ci się podobają, i zaakceptuj to, które działa. – William