ROS系統學習6---攝像頭影象資料的採集
阿新 • • 發佈:2019-02-12
上篇文章我們介紹了怎麼用OpenCV開啟影象並將影象資料傳送出去, 這解決了一部分問題。但實際工程應用中,我們經常需要實時獲取影象資料,因此僅僅讀取本地的圖片是不夠的。本篇我們將研究如何獲取以USB/rtsp等格式傳輸的攝像頭的資料,與上一篇文章相互呼應。
USB攝像頭:
首先,我們要有一個USB攝像頭。確保了這一點後將攝像頭插上去,輸入命令:
ls /dev/v*
如果看到"/dev/video0",則表示攝像頭被成功驅動了。
為了驗證上面的說法,我們可以下載個程式看看攝像頭拍到的畫面:
sudo apt-get install camorama
裝完輸入
camorama
正常的話就可以看到畫面了。
到此,準備工作做完。ROS有很多的開源包提供讀取USB資料的功能,比如usb_cam和gscam等,但本人嘗試過後都存在這不程度的問題(可能是本人用的攝像頭比較神奇),因此本人直接用OpenCV讀取來處理,簡單粗暴,效果迷人!只需要把上篇文章的rosOpenCV.cpp的程式碼改寫下即可:
#include <ros/ros.h> #include <image_transport/image_transport.h> #include <opencv2/highgui/highgui.hpp> #include <cv_bridge/cv_bridge.h> #include <stdio.h> int main(int argc, char** argv) { ros::init(argc, argv, "image_publisher"); ros::NodeHandle nh; cv::Mat image; cv::VideoCapture cap(0);//0為要索引的攝像頭 if(!cap.isOpened()) { ROS_INFO("can not opencv video device\n"); return 1; } while (nh.ok()) { cap >> image;//從攝像頭抓取一幀影象 cv::imshow("",image); cv::waitKey(3); } ros::spin(); }