> 백엔드 개발 > C++ > OpenCV의 'Point(x,y)'는 매트릭스 액세스의 'at(i,j)'와 어떻게 다릅니까?

OpenCV의 'Point(x,y)'는 매트릭스 액세스의 'at(i,j)'와 어떻게 다릅니까?

DDD
풀어 주다: 2024-12-09 17:48:15
원래의
955명이 탐색했습니다.

How Does OpenCV's `Point(x,y)` Differ from `at(i,j)` in Matrix Access?

OpenCV의 좌표계 이해

OpenCV와 같은 이미지 처리 라이브러리에서는 좌표계와 행렬 요소의 순서가 혼동될 수 있습니다. 이 문서에서는 이러한 개념, 특히 행렬 요소에 액세스하기 위해 at(i,j)와 비교하여 OpenCV에서 Point(x,y)를 사용하는 방법을 명확히 하는 것을 목표로 합니다.

행렬 순서 지정

OpenCV의 이력서: :Mat 데이터 구조는 이미지와 행렬 모두에 활용됩니다. 수학적으로 행렬은 행 우선 순서로 정렬됩니다. 즉, 첫 번째 인덱스는 행을 지정하고 두 번째 인덱스는 열을 지정합니다.

점 좌표

좌표계의 점은 일반적으로 x로 정렬됩니다. -축이 먼저이고 y축이 두 번째입니다(직교 좌표계). 그러나 이미지 처리에서 사용되는 축 순서는 이미지 표기법으로 알려져 있으며, 여기서 첫 번째 값은 x 방향(가로 좌표)을 나타내고 두 번째 값은 y 방향(세로 좌표)을 나타냅니다.

OpenCV 매트릭스 액세스

OCV의 at(i,j) 메소드를 사용하면 (행, 열) 인덱스를 사용하여 요소에 액세스할 수 있으며, 행렬의 왼쪽 상단은 다음과 같습니다. (0,0).

포인트 액세스

OpenCV의 Point(x,y) 생성자를 사용하면 이미지 표기법을 사용하여 cv::Mat의 요소에 액세스할 수 있습니다. 여기서 x는 열을 나타내고 y는 행.

300x200 행렬을 고려해보세요. (src):

for (int i = 0; i < src.rows; i++) {
  for (int j = 0; j < src.cols; j++) {
    line(src, Point(i, j), Point(i, j), Scalar(255, 0, 0), 1, 8);
  }
}
로그인 후 복사

이미지 전체에 흰색 선을 그리는 코드입니다. 그러나 이미지의 위쪽 부분만 채워집니다. 이는 line 함수가 i를 열로 해석하고 j를 행으로 해석하는 Point(i,j) 생성자를 사용하기 때문입니다.

Point(i,j) 대신 at(i,j)를 사용하면 (행, 열) 순서를 사용하므로 이미지 전체를 흰색으로 올바르게 채웁니다.

결론

행/열 구분 이해 OpenCV에서 점에 사용되는 행렬 순서와 이미지 표기법은 OpenCV에서 이미지와 행렬을 효과적으로 조작하는 데 중요합니다. at(i,j) 메서드와 Point(x,y) 생성자는 애플리케이션의 특정 요구 사항에 맞춰 다양한 좌표계를 기반으로 요소에 액세스하는 편리한 방법을 제공합니다.

위 내용은 OpenCV의 'Point(x,y)'는 매트릭스 액세스의 'at(i,j)'와 어떻게 다릅니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿