Vector와 Scalar 비교
1. Scalar (스칼라)
- 정의
- scalar는 OpenCV에서 4개의 값(R, G, B, A)을 저장할 수 있는 고정 크기 데이터 구조
- 주로 색상이나 고정된 겂을 표현 시 사용 - 구조
- 형식 : Scalar(double v0, double v1 = 0, double v2 = 0, double v3 = 0)
- v0 : 보통 Blue 값 (OpenCV는 기본적으로 BGR 순서를 사용)
- v1 : Green
- V2: Red
- v3 : Alpha (투명도) (옵션) - 용도
1) 색상 지정
ex) 빨간색 선을 그릴 때
Cv2.Line(image, pt1, pt2, new Scalar(0, 0, 255)); // BGR: (0, 0, 255) → 빨간색
2) 이미지 전체를 특정 색으로 채울 때
Mat img = new Mat(new Size(640, 480), MatType.CV_8UC3, new Scalar(255, 0, 0)); // 파란색으로 채움
3) 픽셀 값 조작
ex) 특정 픽셀 값을 읽거나 쓸 때 사용
Scalar color = image.At<Vec3b>(y, x); // (B, G, R) 값 반환
- 특징
- 고정 크기(4개 값)로 빠른 처리 가능 - 주로 색상, 픽셀 값, 상수 값 표현에 사용
- 단순한 값 저장이나 색상 표현에 최적화 됨
2. Vector (벡터)
- 정의
- Vector는 동적 크기의 데이터 구조로, C++의 std::vector와 유사
- 여러 개의 요소 (예: 점, 선, 이미지 객체 등)를 리스트 형태로 저장할 때 사용
- C#에서는 List<T>와 같은 역할을 함 - 구조
- 형식 : Vector<T> (T는 저장할 데이터 타입)
예) Vector<Point>는 여러 개의 점(Point)을 저장하는 벡터 - 용도
1) 여러 개의 객체 저장
예를 들어, 윤곽선을 찾을 때 반환되는 값
Vector<Vector<Point>> contours = new Vector<Vector<Point>>();
Cv2.FindContours(image, contours, RetrievalModes.External, ChainApproxMethods.ChainApproxSimple);
- contours : 이미지에서 찾은 여러 개의 윤곽선을 저장
- 각 윤곽선은 여러 개의 점(Point)으로 이루어 짐
2) 다양한 객체 리스트 처리
- 여러 선분, 점, 원 등을 동적으로 저장하고 사용할 때
3) 다중 채널 데이터 저장
- 예를 들어, 히스토그램 데이터를 여러 개 저장하거나, 다차원 배열을 저장할 때 사용
- 특징
- 동적 크기로 필요에 따라 데이터 양을 조절할 수 있음
- 주로 윤곽선 검출, 객체 추적, 다수의 데이터 처리에 사용
- for 루프 등을 통해 반복 처리하기 용이
3. 비교 정리
4. 실제 예제
1) Scalar 사용 예제 (색상 지정)
Mat img = new Mat(new Size(500, 500), MatType.CV_8UC3, Scalar.All(0));
Cv2.Circle(img, new Point(250, 250), 100, new Scalar(0, 255, 0), -1); // 초록색 원
Cv2.ImShow("Scalar Example", img);
Cv2.WaitKey(0);
2) Vector 사용 예제 (윤곽선 찾기)
Mat img = Cv2.ImRead("path_to_image.jpg", ImreadModes.Grayscale);
Mat canny = new Mat();
Cv2.Canny(img, canny, 50, 150);
Vector<Vector<Point>> contours = new Vector<Vector<Point>>();
Cv2.FindContours(canny, contours, RetrievalModes.External, ChainApproxMethods.ChainApproxSimple);
// 윤곽선 그리기
Mat result = new Mat(img.Size(), MatType.CV_8UC3, Scalar.All(0));
for (int i = 0; i < contours.Size; i++)
{
Cv2.DrawContours(result, contours, i, new Scalar(255, 0, 0), 2); // 파란색 윤곽선
}
Cv2.ImShow("Vector Example", result);
Cv2.WaitKey(0);
5. 결론
- Scalar는 주로 색상과 단일 픽셀 값에 사용
- Vector는 여러 데이터(점, 윤곽선, 객체 등)를 동적으로 저장하고 처리할 때 사용
'Computer Vision > OpenCv' 카테고리의 다른 글
OpenCV 이미지 검출 (2) (0) | 2025.02.12 |
---|---|
OpenCV 이미지 검출 (1) (0) | 2025.02.12 |
OpenCV 기초 (1) (0) | 2025.02.12 |
OpenCV 소개 및 설치 (0) | 2025.02.12 |
머신 비전 기초(2) (0) | 2025.02.12 |