from cv_bridge import CvBridge

About_work·2024년 2월 21일
0

python 기초

목록 보기
37/56
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)  # Scale for visualization

1. 설명

  • 이 코드는 ROS (Robot Operating System) 환경에서 카메라로부터 받은 이미지 메시지를 OpenCV 형식으로 변환하고 처리하는 작업
  • cv_bridgeROS 이미지 메시지 <-> OpenCV 이미지 변환을 담당하는 패키지
  • 여기서 사용된 메서드와 함수들은, 이미지 처리 파이프라인에서 흔히 볼 수 있는 작업을 수행

1.1. CvBridgeimgmsg_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 (선택적):
      • 모든 픽셀에 추가되는 값
      • 기본값은 0
  • 반환 값:
    • 스케일이 조정된 이미지
    • 데이터 타입은 CV_8UC1 또는 CV_8UC3일 수 있음
    • 여기서 함수는 입력 이미지를 절대값으로 변환한 후, 데이터 타입을 uint8로 변환하여 반환

코드 설명

  1. CvBridge의 인스턴스를 생성합니다. 이 인스턴스는 ROS 이미지 메시지를 OpenCV 형식으로 변환하는 데 사용됩니다.
  2. imgmsg_to_cv2(msg, "bgr8"): ROS 이미지 메시지를 BGR 색상 공간을 가진 OpenCV 이미지로 변환합니다. 이 변환은 일반적인 컬러 이미지에 사용됩니다.
  3. imgmsg_to_cv2(msg, "16UC1"): 같은 ROS 이미지 메시지를 16비트 단일 채널 이미지로 변환합니다, 이는 주로 깊이 정보를 포함한 이미지에 사용됩니다.
  4. cv2.convertScaleAbs(cv_image, alpha=0.03)
  • 깊이 이미지를 시각화하기 위해 스케일을 조정
  • alpha=0.03는 원본 깊이 값의 범위를 0에서 255 사이의 범위로 스케일링하기 위해 선택된 값
  • 이렇게 스케일링하면 깊이 이미지를 시각적으로 해석하기 더 쉬움.

profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글