2016-10-23 10 views
0

я был найти в Интернете код, который использует следующий кодЧто отличается от Mat.at <uchar> и Mat.at <int>

cv::VideoCapture frame_capture; 
... 
cv::Mat frame; 
frame_capture.read(frame); 
... 
std::vector<cv::Mat> bgr_planes; 
split(frame, bgr_planes); 
... 
int curr_pixel = (bgr_planes[0].at<uchar>(row_index,col_index)); 
... 

которые получают значение из вектора Mat и присвоить его переменной

, когда я попытался изменить на .at<int> я получил эту ошибку

OpenCV Error: Assertion failed (dims <= 2 && data && (unsigned)i0 < (unsigned)size.p[0] && (unsigned)(i1*DataType<_Tp>::channels) < (unsigned)(size.p[1]*channels()) && ((((sizeof(size_t)<<28)|0x8442211) >> ((DataType<_Tp>::depth) & ((1 << 3) - 1))*4) & 15) == elemSize1()) in cv::Mat::at, file C:\Open_CV\opencv\build\include\opencv2/core/mat.hpp, line 537

мой вопрос, так как .at возвращает целое число, поэтому здесь мы имеем

ответ

1

поскольку .at возвращает целое число, поэтому здесь мы .at?

Ваши помещения ошибаетесь:

.at<type> 

возвращает переменную данного типа. Затем вы можете использовать другой тип, например, «int».

Это эквивалентно:

uchar original_value = mat.at<uchar>(row, col); 
int int_value = original_value; 

ошибка означает, что вы собираетесь из грань матричных данных, потому что вы индексировать массив Uchar (1 байт), как если бы это был массив от int (4 байта)