我試圖讓使用ROS一個簡單的項目(靛藍,安裝在Ubuntu 14.04)和OpenCV 3.0.0從視頻讀取的圖像(當攝像頭或文件)並使用ROS的image_transport發佈。分割故障(核心轉儲)使用cv_bridge(ROS靛藍)和OpenCV 3
讀取圖像,並顯示它工作正常,但只要我努力,包括和使用cv_bridge轉換和發佈的圖像,但仍編譯罰款,但在運行可執行文件時,它失敗
分割故障(核心轉儲)
我的代碼:
#include <ctime>
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include "image_transport/image_transport.h"
#include "cv_bridge/cv_bridge.h"
#include <fstream>
int main(int argc, char **argv)
{
cv::Mat image;
ros::init(argc, argv, "webcam_streamer");
ros::NodeHandle nh;
ros::Rate loop_rate(500);
image_transport::ImageTransport it(nh);
image_transport::Publisher pub = it.advertise("cam_img", 10);
cv::VideoCapture cap("//home//milan//drop.avi");
if(!cap.isOpened())
{
ROS_ERROR("COULD NOT OPEN FILE!\r\n");
return 0;
}else
ROS_INFO("Read file successfully!\r\n");
while(nh.ok())
{
ROS_INFO("Reading image");
cap.read(image);
ROS_INFO("...");
if(image.empty())
break;
ROS_INFO("Success!");
cv::imshow("IMG", image);
cv::waitKey(20);
sensor_msgs::ImagePtr msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", image).toImageMsg();
pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();
}
ROS_INFO("STOPPING CAM");
cap.release();
}
在我的CMakeLists.txt我做
find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs
cv_bridge
image_transport
)
find_package(OpenCV REQUIRED)
add_executable(stream_webcam_image src/stream_webcam_image.cpp)
target_link_libraries(stream_webcam_image ${catkin_LIBRARIES})
target_link_libraries(stream_webcam_image ${OpenCV_LIBS})
add_dependencies(stream_webcam_image stream_webcam_image_gencpp)
當我從我的CMakeLists.txt刪除cv_bridge和我包括和鴕鳥政策嘗試發佈圖像,程序運行正常,否則失敗,出現以下的輸出:
如此看來它甚至無法讀取圖像。
這個問題似乎是ROS(特別是cv_bridge)使用了OpenCV的舊版本這與我所安裝的版本3衝突。
我試圖按照這樣的: Latest OpenCV in ROS 但 ls /opt/ros/rosversion -d/lib/libopencv* -hal
沒有發現在ROS文件夾中當前OpenCV的,我不能手動找到指定的OpenCV的文件夾。 我仍然按照步驟操作,但仍然出現相同的錯誤。
後來我發現this question on ROS Answers 這似乎是同樣的問題,但我想已經安裝了OpenCV的3,這也應該建立從源頭opencv_vision後編譯ROS,如上面的線表明在過去有何評論?
我錯過了什麼,或者有沒有更好的辦法解決這個問題?
我的目標是讓我的Raspberry Pi 2使用ROS將圖像從它的相機發送到我的筆記本電腦,而Raspbian Jessie似乎只支持OpenCV 3,我僅限於此。另外我使用Qt Creator的Ubuntu上寫我的皮程序,所以使用的皮在Ubuntu的OpenCV 2和OpenCV 3將是非常麻煩的。