티스토리 뷰
픽셀에 임의 접근하기 : at() method
(y) (x)
Mat::at<Datatype>(int row, int col)
<좌표를 반환한다>
at 은 templete 함수이기 때문에 type 을 지정해야됨.
- for grayscale images
- for true color images
- image.at<Vec3b>(r,c)[channel] = value;
channel: 0, 1, 2( 각 B,G ,R) => 벡터로 생각하자
r,c 위치의 백터 3의 위치에 저장하고 만약 R G B 중 한개의 값이다 하면 index를 사용해서 구분한다.
Vec<Type , Number>
- typedef Vec(uchar,3) Vec3b;
void colorinvert(Mat &image) {
int numOfLines = image.rows; // 이미지의 세로 길이를 알 수 있다.
int numOfPixels = image.cols; // 이미지의 가로 길이를 알 수 있다
for (int r = 0; r < numOfLines; r++) { // 행의 위치
for (int c = 0; c < numOfLines; c++) { // 열의 위치
Vec3b &vec = image.at<Vec3b>(r, c);
vec[0] = 255 - vec[0];
vec[1] = 255 - vec[1];
vec[2] = 255 - vec[2];
}
}
}
void grayscaleinvert(Mat &image) {
int numOfLines = image.rows; // 이미지의 세로 길이를 알 수 있다.
int numOfPixels = image.cols; // 이미지의 가로 길이를 알 수 있다
for (int r = 0; r < numOfLines; r++) { // 행의 위치
for (int c = 0; c < numOfLines; c++) { // 열의 위치
uchar &value = image.at<uchar>(r, c);
value = 255 - value;
}
}
}
- for grayscale images
- for true color images
영상 스캐닝 : ptr() method
인자로서 행의 번호를 지정하면 행이 시작하는 위치를 전달해 준다.
Mat::ptr<Datatype>(int row)
- for grayscale images
- for true color images
- for grayscale & true color images
영상 스캐닝 : iterators
C++ 에서 기본적으로 제공하는 라이브러리
- for grayscale images
- for true color images
영상 스캐닝 : 저수준의 포인터 연산
image data의 시작 위치 지정
uchar *data = image.data;
// 이미지 데이타의 시작 위치 포인터 설정
- (r,c) 위치의 픽셀 접근(gray-scale image)
value = data + r* image.step+c;
// 한 행당 r에다가 바이트 수를 곱하면 r,c의 위치에 접근할 수 있다.
- (r,c) 위치의 픽셀 접근(true color image)
B_value = data + r*image.step + c*image.channels() + 0;
G_value = data + r*image.step + c*image.channels() + 1;
R_value = data + r*image.step + c*image.channels() + 2;
- 다음 라인(줄)으로 이동
data += image.step;
// 한 행당 바이트 수
항상 4바이트의 배수가 되어야 된다.
부가적인 데이터가 들어간다.
실제 데이터의 개수( 불필요한 데이터 포함)
Mat::isContinuous() // 부가적인 정보가 있는 지 없는지 판별 가능
// True or false
부가적인 데이터가 없다 => True
처리 속도 비교 ( 단위 : msec)
'3학년 2학기 > openCV' 카테고리의 다른 글
background (3) | 2016.12.05 |
---|---|
Image segmentation (0) | 2016.12.05 |
사람의 피부 검출 (0) | 2016.11.24 |
공간 필터링 (0) | 2016.10.15 |
opencv 영상 (0) | 2016.10.15 |