1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        ROS—基于python3實(shí)現(xiàn)opencv圖像處理任務(wù)

        共 3581字,需瀏覽 8分鐘

         ·

        2022-05-31 10:27

        點(diǎn)擊下方卡片,關(guān)注“新機(jī)器視覺”公眾號(hào)

        重磅干貨,第一時(shí)間送達(dá)

        ?

        網(wǎng)上所有的資料都是基于catkin工具進(jìn)行的,而且在編譯時(shí)會(huì)發(fā)現(xiàn)只支持opencv3,不支持opencv4,所以無(wú)法使用。


        博主這里使用catkin_make工具成功編譯python3的cv_bridge,這篇博客應(yīng)該是全網(wǎng)唯一一個(gè)用catkin_make工具編譯cv_bridge而且最終運(yùn)行成功的博客了,也希望能幫到各位小伙伴開發(fā)ROS python3+opencv4的項(xiàng)目!



        0.軟件環(huán)境


        • Ubuntu18.04

        • python3.6.9

        • ROS Melodic


        Jetson系列基礎(chǔ)環(huán)境配置:Jetson系列——Ubuntu18.04版本基礎(chǔ)配置(換源、ROS、遠(yuǎn)程桌面、開機(jī)自連WIFi、SD卡備份):

        https://blog.csdn.net/qq_45779334/article/details/108611797


        樹莓派環(huán)境配置:樹莓派4B——Ubuntu 18.04.05安裝和基礎(chǔ)配置教程(包括WIFI和遠(yuǎn)程桌面配置、ROS和主從機(jī)控制):

        https://blog.csdn.net/qq_45779334/article/details/108969323


        虛擬機(jī)環(huán)境配置:Ubuntu——雙系統(tǒng)Ubuntu18.04系統(tǒng)安裝和基礎(chǔ)配置并安裝ROS:

        https://blog.csdn.net/qq_45779334/article/details/113815018



        1.編譯python3的cv_bridge


        在ROS中想使用python3,最重要的就是需要重新編譯基于python3的cv_bridge,只有我們?cè)诰幾g完成后,才能基于python3的cv_bridge完成圖像相關(guān)節(jié)點(diǎn)的使用,所以編譯cv_bridge便是最基礎(chǔ)和最重要的一步,該博客詳細(xì)介紹了完整的編譯過程,按步驟進(jìn)行操作即可成功。


        ROS——基于Ubuntu18.04和ROS Melodic編譯python3的cv_bridge:

        https://blog.csdn.net/qq_45779334/article/details/119641789


        在編譯好cv_bridge后,我們就可以進(jìn)行測(cè)試基于python3的圖像處理節(jié)點(diǎn)啦!



        2.創(chuàng)建基于python3的圖像ROS節(jié)點(diǎn)


        (1)初始化py3_test_ws工作空間


        mkdir py3_test_ws && cd py3_test_wsmkdir src && cd srccatkin_init_workspace


        (2)創(chuàng)建功能包


        catkin_create_pkg py3_demo rospy rosmsg roscpp


        (3)編寫python3的圖像發(fā)布和接收節(jié)點(diǎn)


        cd py3_demo && mkdir scriptscd scripts && touch camera.py img_process.pychmod +x camera.pychmod +x img_process.py


        將以下兩個(gè)節(jié)點(diǎn)代碼分別粘進(jìn)對(duì)應(yīng)的文件中:


        攝像頭發(fā)布節(jié)點(diǎn)


        camera.py


        #!/usr/bin/env python3# coding:utf-8
        import cv2import numpy as npimport rospyfrom std_msgs.msg import Headerfrom sensor_msgs.msg import Imagefrom cv_bridge import CvBridge , CvBridgeErrorimport time
        if __name__=="__main__": ? ?import sys ? ?print(sys.version) # 查看python版本 ? ?capture = cv2.VideoCapture(0) # 定義攝像頭 ? ?rospy.init_node('camera_node', anonymous=True) #定義節(jié)點(diǎn) ? ?image_pub=rospy.Publisher('/image_view/image_raw', Image, queue_size = 1) #定義話題 ? ? ? ?header = Header(stamp = rospy.Time.now()) ? ?header.frame_id = "Camera" ? ?ros_frame = Image() ? ?ros_frame.header=header ? ?ros_frame.width = 640 ? ?ros_frame.height = 480 ? ?ros_frame.encoding = "bgr8" ? ?# ros_frame.step = 1920
        ? ?while not rospy.is_shutdown(): ? ?# Ctrl C正常退出,如果異常退出會(huì)報(bào)錯(cuò)device busy! ? ? ? ?start = time.time() ? ? ? ?ret, frame = capture.read() ? ? ? ?if ret: # 如果有畫面再執(zhí)行 ? ? ? ? ? ?# frame = cv2.flip(frame,0) ? #垂直鏡像操作 ? ? ? ? ? ?frame = cv2.flip(frame,1) ? #水平鏡像操作 ? ? ? ? ? ? ? ? ?ros_frame.data = np.array(frame).tostring() #圖片格式轉(zhuǎn)換 ? ? ? ? ? ?image_pub.publish(ros_frame) #發(fā)布消息 ? ? ? ? ? ?end = time.time() ? ? ? ? ? ? ?print("cost time:", end-start ) # 看一下每一幀的執(zhí)行時(shí)間,從而確定合適的rate ? ? ? ? ? ?rate = rospy.Rate(25) # 10hz
        ? ?capture.release() ? ?cv2.destroyAllWindows() ? ?print("quit successfully!")


        攝像頭接收處理節(jié)點(diǎn)


        img_process.py


        #!/usr/bin/env python3# coding:utf-8
        import rospyimport numpy as npfrom sensor_msgs.msg import Imagefrom cv_bridge import CvBridge, CvBridgeErrorimport cv2 def callback(data): ? ?cv_img = bridge.imgmsg_to_cv2(data, "bgr8") ? ?cv2.imshow("frame" , cv_img) ? ?cv2.waitKey(1)
        if __name__ == '__main__': ? ?import sys ? ?print(sys.version) # 查看python版本 ? ? ? ?rospy.init_node('img_process_node', anonymous=True) ? ?bridge = CvBridge() ? ?rospy.Subscriber('/image_view/image_raw', Image, callback) ? ?rospy.spin()



        3.運(yùn)行節(jié)點(diǎn)


        (1)編譯


        cd ../../..catkin_make -DPYTHON_EXECUTABLE=/usr/bin/python3


        (2)將工作空間添加進(jìn)環(huán)境變量


        sudo vim ~/.bashrcsource /home/nano/workspace/py3_test_ws/devel/setup.bash


        (3)運(yùn)行節(jié)點(diǎn)


        roscorerosrun py3_demo camera.pyrosrun py3_demo img_process.py


        運(yùn)行效果圖


        可以看到,打印出的python版本為3.6.9:



        在這之后就可以使用python3進(jìn)行圖像處理、深度學(xué)習(xí)等任務(wù)節(jié)點(diǎn)的開發(fā)啦,如果你也成功跑通了該項(xiàng)目,給博主點(diǎn)個(gè)贊支持下吧,嘻嘻~



        4.與C++圖像處理節(jié)點(diǎn)混合使用


        ROS——C++與Python3的圖像節(jié)點(diǎn)基于OpenCV相互發(fā)送和接收

        https://blog.csdn.net/qq_45779334/article/details/124323809


        來源:古月居


        本文僅做學(xué)術(shù)分享,如有侵權(quán),請(qǐng)聯(lián)系刪文。

        —THE END—
        瀏覽 82
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            天天摸天天干天天操 | 九九九无码 | 亚洲天堂一区二区 | 国产丰满乱子伦午夜福利 | 我和大乳寡妇在线观看 | 青青草大香蕉 | 日本黄色小视频在线观看 | 欧美老人性爱网站在线观看视频 | 日韩人妻精品 | 国产又黄又爽的免费视频 |