Opencv data type
CV_8U : 8-bit unsigned integer: uchar ( 0..255 )
CV_8S : 8-bit signed integer: schar ( -128..127 )
CV_16U : 16-bit unsigned integer: ushort ( 0..65535 )
CV_16S : 16-bit signed integer: short ( -32768..32767 )
CV_32S : 32-bit signed integer: int ( -2147483648..2147483647 )
CV_32F : 32-bit floating-point number: float ( -FLT_MAX..FLT_MAX, INF, NAN )
CV_64F : 64-bit floating-point number: double ( -DBL_MAX..DBL_MAX, INF, NAN )
1채널이면 img.at<uchar>(y,x) or img.at<ushort>(y,x), 이런식으로 접근하면 됨
채널이 2채널 이상일때는 uchar이런식으로 쓰지않고 Vec2b, Vec3b이런식으로 쓴다.
https://docs.opencv.org/3.4/dc/d84/group__core__basic.html#gaf20d857c2077c986d3b303e3d58bbc54
OpenCV: Basic structures
template<typename T , typename A1 , typename A2 , typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 , typename A10 > Ptr cv::makePtr ( const A1 & a1, const A2 & a2, const A3 & a3, const A4 & a4, const A
docs.opencv.org
type | 채널수 | |
Vec3b | uchar | 3 |
Vec3d | double | 3 |
Vec3f | float | 3 |
Vec3i | int | 3 |
Vec3s | short | 3 |
Vec3w | ushort | 3 |
위와 같이 Vec3b 면 uchar가 3채널 있다는 말임.
img.at<cv::Vec3b>(y,x)[0]
img.at<cv::Vec3b>(y,x)[1]
img.at<cv::Vec3b>(y,x)[2]
형식이 uchar일경우 (CV_8UC3) 이렇게 접근하면 된다.
참고해서 형식을 잘맞춰야 세그먼트 폴트 에러가 안뜸...
위 링크에 들어가서 보면 더 다양한 형식을 참고할수 있다.