>백엔드 개발 >C++ >OpenCV의 `Point(x,y)`를 `line()`과 함께 사용할 때 `src.at(i,j)`와 비교하여 예상치 못한 결과를 생성하는 이유는 무엇입니까?

OpenCV의 `Point(x,y)`를 `line()`과 함께 사용할 때 `src.at(i,j)`와 비교하여 예상치 못한 결과를 생성하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-19 07:25:09122검색

Why does `Point(x,y)` in OpenCV produce unexpected results when used with `line()` compared to `src.at(i,j)`?

OpenCV: 점(x,y) 표현 이해

이미지 처리에서는 점 순서를 이해하는 것이 중요할 수 있습니다. 인기 있는 컴퓨터 비전 라이브러리인 OpenCV는 점 표현에 혼란을 초래할 수 있는 좌표계를 활용합니다.

질문:

크기가 300x200인 행렬 소스입니다. 다음 작업을 적용할 경우:

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 );
  }
}
imshow("A",src);
waitKey(0);

예상되는 결과는 전체 이미지를 흰색 선으로 채우는 것입니다. 그러나 위쪽 부분만 흰색이 됩니다.

이 동작은 다음 작업과 대조됩니다.

for(int i = 0; i < src.rows; i++){
  for(int j = 0; j < src.cols; j++){
    src.at<uchar>(i,j)=255;
  }
}
imshow("A",src);
waitKey(0);

전체 이미지를 흰색으로 성공적으로 채웁니다.

답변:

설명은 사용되는 다양한 표현에 있습니다. 포인트:

  • src.at(i,j): (i,j)를 (행, 열)로 사용합니다.
  • 점(x,y): (x,y)를 다음과 같이 사용합니다. (column,row).

이러한 불일치는 이미지와 행렬을 모두 나타내는 OpenCV Mat의 이중 특성에서 비롯됩니다. 행렬 표기법에서는 행 우선 순서가 사용됩니다. 여기서 첫 번째 인덱스는 행을 나타내고 두 번째 인덱스는 열을 나타냅니다. 이 규칙은 src.at(i,j)와 일치합니다.

반대로 점의 좌표계는 이미지 표기법을 따릅니다. 여기서 첫 번째 값은 x 방향(열)을 지정하고 두 번째 값은 값은 y 방향(행)을 지정합니다. 이는 Point(x,y)의 (열, 행) 순서 사용과 src.at(열, 행)과의 정렬에 대해 설명합니다.

이 차이점을 이해하는 것은 효과적으로 액세스하고 수정하는 데 필수적입니다. OpenCV의 포인트

위 내용은 OpenCV의 `Point(x,y)`를 `line()`과 함께 사용할 때 `src.at(i,j)`와 비교하여 예상치 못한 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.