跳转至

实验四

roslaunch realsense2_camera rs_camera.launch

颜色识别

scripts/ros-opencv-color.py
#!/usr/bin/env python
import rospy
import cv2
import numpy as np
from cv_bridge import CvBridge, CvBridgeError
from sensor_msgs.msg import Image
class rosopencvcolor():
    def __init__(self):
        rospy.init_node('ros_opencv_color')
        self.cv_bridge = CvBridge()
        rospy.Subscriber('/camera/color/image_raw', Image, self.color_img_cb)
        self.lane_img_pub = rospy.Publisher('/lane_image', Image, queue_size=5)
    def color_img_cb(self, data):
        try:
            cv_img = self.cv_bridge.imgmsg_to_cv2(data, 'bgr8')
        except CvBridgeError as e:
            print e
        height, width, channels = cv_img.shape
        lower = np.array([0,0,140], dtype = "uint8")
        upper = np.array([255, 255, 255], dtype = "uint8")
        mask = cv2.inRange(cv_img, lower, upper)
        extraction = cv2.bitwise_and(cv_img, cv_img, mask = mask)
        if not rospy.is_shutdown():
            self.lane_img_pub.publish(self.cv_bridge.cv2_to_imgmsg(np.hstack([cv_img, extraction]), "bgr8"))
            cv2.imshow("Image window", np.hstack([cv_img, extraction]))
            cv2.imshow('test', cv_img)
            cv2.waitKey(1)
if __name__ == '__main__':
    rosopencvcolor()
    rospy.spin()
    cv2.destroyAllWindows()

轮廓识别

scripts/ros-opencv-findcontours.py
#!/usr/bin/env python
import os
import math
import rospy
import cv2
import numpy as np
from cv_bridge import CvBridge, CvBridgeError
from sensor_msgs.msg import Image
class rosopencvfindcontours():
    def __init__(self):
        rospy.init_node('ros_opencv_findcontours')
        self.cv_bridge = CvBridge()
        rospy.Subscriber('/camera/color/image_raw', Image, self.color_img_cb)
        self.lane_img_pub = rospy.Publisher('/lane_image_findcontours', Image, queue_size=5)
    def color_img_cb(self, data):
        try:
            cv_img = self.cv_bridge.imgmsg_to_cv2(data, 'bgr8')
        except CvBridgeError as e:
            print e
        ret, thresh = cv2.threshold(cv2.cvtColor(cv2.GaussianBlur(cv_img, (5, 5), 0), cv2.COLOR_BGR2GRAY), 127, 255, cv2.THRESH_BINARY)
        img_, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
        cv2.drawContours(cv_img, contours, -1, (255, 120, 0), 3)
        cv2.imshow('Image', np.hstack((cv2.cvtColor(thresh, cv2.COLOR_GRAY2BGR), cv_img)))
        cv2.waitKey(1)
if __name__ == '__main__':
    rosopencvfindcontours()
    rospy.spin()
    cv2.destroyAllWindows()

最后更新: 2021-12-05