日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ROS+openCV图像处理方法及案例

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ROS+openCV图像处理方法及案例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文內容環境Ubuntu20.04。

首先,我們需要安裝openCV。

sudo apt-get install ros-noetic-vision-opencv?libopencv-dev?python3-opencv

?然后需要安裝我們的三個功能包來啟動。

首先創建工作空間在終端運行

~$ mkdir -p democv01_ws/src ~$ cd democv01_ws/ ~/democv01_ws$ catkin_make

然后再src目錄下,放置我們的三個功能包。

?我們可以在vscode里面打開,在democv01_ws目錄下,啟動命令code .

此時我們發現有報錯

可能是Python最新版本標準不一樣,我們在報錯的地方均加上括號就可以了。

然后要修改一下編譯配置,啟動ctrl+shift+B選擇catkin_make.build修改tasks.json文件

{
// 有關 tasks.json 格式的文檔,請參見
? ? // https://go.microsoft.com/fwlink/?LinkId=733558
? ? "version": "2.0.0",
? ? "tasks": [
? ? ? ? {
? ? ? ? ? ? "label": "catkin_make:debug", //代表提示的描述性信息
? ? ? ? ? ? "type": "shell", ?//可以選擇shell或者process,如果是shell代碼是在shell里面運行一個命令,如果是process代表作為一個進程來運行
? ? ? ? ? ? "command": "catkin_make",//這個是我們需要運行的命令
? ? ? ? ? ? "args": [],//如果需要在命令后面加一些后綴,可以寫在這里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”
? ? ? ? ? ? "group": {"kind":"build","isDefault":true},
? ? ? ? ? ? "presentation": {
? ? ? ? ? ? ? ? "reveal": "always"//可選always或者silence,代表是否輸出信息
? ? ? ? ? ? },
? ? ? ? ? ? "problemMatcher": "$msCompile"
? ? ? ? }
? ? ]
}
?

?然后ctrl+shift+B編譯一下。

之后我們在工作空間下運行

~/democv01_ws$ source ./devel/setup.bash

~/democv01_ws$ roslaunch robot_vision usb_cam.launch

切換終端窗口再運行

rosrun robot_vision cv_bridge_test.py

如果報錯可能是沒有加可執行權限,chmod +x *.py

此時可以出現窗口,還可以運行

rqt_image_view進行查看

之后就可以看到我們的人臉圖像了。

?

我們可以看一下在程序中是如何實現的。打開cv_bridge_test.py

我們需要了解兩個函數

imgmsg_to_cv2():將ROS圖像消息裝換位openCV圖像消息。

cv2_to_imsmsg():將openCV圖像格式的消息轉換成ROS圖像消息。

主要內容在我們的上面的發布者和訂閱者,

發布者是通過openCV處理后的圖像返回給ROS的數據。

訂閱者是ROS訂閱攝像頭驅動起來的最原始的數據,一旦有數據進來后,就會調用我們的回調函數,這是關鍵。

try:cv_image = self.bridge.imgmsg_to_cv2(data, "bgr8")except CvBridgeError as e:print (e)

這里我們將ROS中的圖像數據轉換成OpenCV的圖像格式,這里的data是消息,bgr8是消息的編碼格式,此時cv_image就拿到了OpenCV的圖像,接下來就是用OpenCV進行圖像處理了,和ros就無關了。最后我們再將圖像數據變回去ROS的圖像數據。

# 再將opencv格式額數據轉換成ros image格式的數據發布try:self.image_pub.publish(self.bridge.cv2_to_imgmsg(cv_image, "bgr8"))except CvBridgeError as e:print (e)

所以我們如果要使用OpenCV,就只需要更改中間的OpenCV的代碼即可。ROS在這里就是做剛開始的圖像驅動和后期的圖像顯示以及中間的橋接。

啟動我們的人臉識別案例。

~/democv01_ws$ roslaunch robot_vision usb_cam.launch

~/democv01_ws$ roslaunch robot_vision face_detector.launch

rqt_image_view

?此時我們便可以顯示我們的人臉進行識別啦!

這里的代碼我就不做解釋了。

總結

以上是生活随笔為你收集整理的ROS+openCV图像处理方法及案例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。