이미지 처리에서는 점 순서를 이해하는 것이 중요할 수 있습니다. 인기 있는 컴퓨터 비전 라이브러리인 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);
전체 이미지를 흰색으로 성공적으로 채웁니다.
답변:
설명은 사용되는 다양한 표현에 있습니다. 포인트:
이러한 불일치는 이미지와 행렬을 모두 나타내는 OpenCV Mat의 이중 특성에서 비롯됩니다. 행렬 표기법에서는 행 우선 순서가 사용됩니다. 여기서 첫 번째 인덱스는 행을 나타내고 두 번째 인덱스는 열을 나타냅니다. 이 규칙은 src.at
반대로 점의 좌표계는 이미지 표기법을 따릅니다. 여기서 첫 번째 값은 x 방향(열)을 지정하고 두 번째 값은 값은 y 방향(행)을 지정합니다. 이는 Point(x,y)의 (열, 행) 순서 사용과 src.at
이 차이점을 이해하는 것은 효과적으로 액세스하고 수정하는 데 필수적입니다. OpenCV의 포인트
위 내용은 OpenCV의 `Point(x,y)`를 `line()`과 함께 사용할 때 `src.at(i,j)`와 비교하여 예상치 못한 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!