from cv_bridge import CvBridge
self.bridge = CvBridge()
cv_image = self.bridge.imgmsg_to_cv2(msg, "bgr8")
cv_image = self.bridge.imgmsg_to_cv2(msg, "16UC1")
cv_image_visual = cv2.convertScaleAbs(cv_image, alpha=0.03)
1. 설명
- 이 코드는 ROS (Robot Operating System) 환경에서 카메라로부터 받은 이미지 메시지를 OpenCV 형식으로 변환하고 처리하는 작업
cv_bridge
는 ROS 이미지 메시지 <-> OpenCV 이미지
변환을 담당하는 패키지
- 여기서 사용된 메서드와 함수들은, 이미지 처리 파이프라인에서 흔히 볼 수 있는 작업을 수행
1.1. CvBridge
와 imgmsg_to_cv2
ROS 이미지 메시지를 OpenCV 이미지로 변환
imgmsg_to_cv2(self, msg, desired_encoding="passthrough")
메서드:
- 파라미터:
msg
: 변환하려는 ROS 이미지 메시지입니다.
desired_encoding
:
- 반환되는 OpenCV 이미지의 원하는 인코딩
"bgr8"
는 표준 BGR 색상 인코딩을 나타내며,
"16UC1"
는 16비트 unsigned single-channel 이미지, 즉 깊이 이미지나 기타 유사한 형태
- 반환 값:
- 변환된 OpenCV 이미지
desired_encoding
에 따라 다양한 데이터 타입과 채널 구성을 가질 수 있음
1.2.cv2.convertScaleAbs
cv2.convertScaleAbs
함수는 입력 이미지를 절대값으로 변환한 후
스케일을 조정
- 주로
깊이 이미지와 같이 높은 범위의 데이터 값을 가진 이미지
를 시각화
할 때 사용
- 파라미터:
src
:
- 입력 이미지
- 여기서는
cv_image
로, imgmsg_to_cv2
메서드를 통해 얻은 이미지
alpha
(선택적):
- 스케일 팩터
- 입력 이미지의 각 픽셀에 곱해지는 값
- 예제에서
0.03
은 깊이 값의 범위를 시각적으로 표현하기 위해 사용된 스케일 팩터
beta
(선택적):
- 반환 값:
- 스케일이 조정된 이미지
- 데이터 타입은
CV_8UC1
또는 CV_8UC3
일 수 있음
- 여기서 함수는 입력 이미지를 절대값으로 변환한 후, 데이터 타입을
uint8
로 변환하여 반환
코드 설명
CvBridge
의 인스턴스를 생성합니다. 이 인스턴스는 ROS 이미지 메시지를 OpenCV 형식으로 변환하는 데 사용됩니다.
imgmsg_to_cv2(msg, "bgr8")
: ROS 이미지 메시지를 BGR 색상 공간을 가진 OpenCV 이미지로 변환합니다. 이 변환은 일반적인 컬러 이미지에 사용됩니다.
imgmsg_to_cv2(msg, "16UC1")
: 같은 ROS 이미지 메시지를 16비트 단일 채널 이미지로 변환합니다, 이는 주로 깊이 정보를 포함한 이미지에 사용됩니다.
cv2.convertScaleAbs(cv_image, alpha=0.03)
- 깊이 이미지를 시각화하기 위해 스케일을 조정
alpha=0.03
는 원본 깊이 값의 범위를 0에서 255 사이의 범위로 스케일링하기 위해 선택된 값
- 이렇게 스케일링하면 깊이 이미지를 시각적으로 해석하기 더 쉬움.