<param name="image_width" value="640" />
<param name="image_height" value="480" />
<param name="autoexposure" value="false" />
<param name="exposure" value="150" />
$ catkin_create_pkg my_cam std_msgs rospy
#!/usr/bin/env python
# _*_ coding: utf-8 _*_
import cv2
import rospy
import numpy as np
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
OpenCV 사용 준비
numpy 사용 준비
bridge = CvBridge()
cv_image = np.empty(shape[0])
ROS에서 OpenCV를 편하게 사용하기 위한 CvBridge 사용 준비
def img_callback(data):
global cv_image
cv_image = bridge.imgmsg_to_cv2(data, "bgr8")
ROS에서 영상정보가 topic안에 msg가 담겨져 날아오는데 그것을 OpenCV가 사용할 수 있는 이미지로 바꿔주는 함수
rospy.init_node('cam_tune',anonymous=True)
rospy.Subscriber("/usb_cam/image_raw",Image,img_callback)
while not rospy.is_shutdown():
if cv_image.size != (640*480*3):
continue
Image 토픽이 오면 callback 함수가 호출되도록 세팅
640x480 이미지 한 장이 모일 때까지 잠시 기다린다
gray = cv2.cvtColor(cv_image, cv2.COLOR_BGR2GRAY)
원본 이미지를 그레이칼라로 변경
blur_gray = cv2.GaussianBlur(gray,(5,5),0)
부드럽게 변경
edge_img = cv2.Canny(np.uint8(blur_gray),60,70)
이미지의 외곽선만 표시하게 변경
cv2.imshow("original",cv_image) cv2.imshow("gray",gray) cv2.imshow("gaussian blur",blur_gray) cv2.imshow("edge",edge_img) cv2.waitKey(1)
원본포함 4개 이미지 표시
$ roslaunch my_cam edge_cam.launch
$ rqt_graph
$ rosbag record -a
날아다디는 모든 토픽을 저장, 멈추려면 'ctrl+c'
$ rosbag record rosout xycar_imu
rosout, xycar_imu, 2개 토픽을 저장
$ rosbag record -O subset xycar_ultrasonic
토픽을 subset.bag 파일로 저장
rosbag info subset.bag
저장된 파일의 각종 정보를 보여줌
$ rosbag play subset.bag
저장했던 토픽을 재생함
$ rosbag play -r 2 subset.bag
2배속으로 재생함
$ rosbag play full_topic.bag
$ rosbag record -O cam_topic /usb_cam/image_raw/
$ rosbag info cam_topic.bag
$ rosbag play cam_topic.bag
$ rostopic list
$ python edge_cam.py
$ rosrun image_view video_recorder image:=' /usb_cam/image_raw'_filename:='track2.avi' _fps:=30
$ rosbag play cam_topic.bag