最近基于TX2平臺做專案,需要用到opencv的VideoCapture功能,我在使用程序中遇到了標題中所描述的問題,在此記錄下解決的方法,
- cmakelist添加目標鏈接庫
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
eigen_conversions
message_generation
cv_bridge
image_transport
)
add_executable(rtsp_camera
src/network/rtsp_camera.cpp)
target_link_libraries(rtsp_camera
${OpenCV_LIBRARIES}
${catkin_LIBRARIES}
)
- .cpp檔案中添加頭檔案
#include <opencv2/core/core.hpp>
#include <image_transport/image_transport.h>
#include <opencv2/highgui/highgui.hpp>
#include <cv_bridge/cv_bridge.h>
#include <opencv2/videoio/videoio.hpp>
#include <opencv2/video.hpp>
#include <opencv2/imgproc/imgproc.hpp>
- .cpp檔案中相關代碼展示
void
RtspCamera::spin()
{
ros::Rate loop_rate(3);
//rtsp視頻流地址
string filename = "rtsp://admin:admin@192.168.42.108:554/cam/realmonitor?channel=1&subtype=0";
Mat frame;
cv::VideoCapture cap;
cap.open(filename);
if (!cap.isOpened()) {
cerr << "打開視頻流失敗\n";
return;
}
while(ros::ok())
{
cap.read(frame);
if (frame.empty()) {
cerr << "未提取到視頻幀\n";
break;
}
image_ = cv_bridge::CvImage(std_msgs::Header(), "rgb8", frame).toImageMsg();
image_raw_pub_.publish(&image_);
ros::spinOnce();
loop_rate.sleep();
}
}
- 編譯發現報標題中所示錯誤,查看/usr/local/include/opencv2/videoio.hpp中有VideoCapture類,因此猜想可能沒有找到相關靜態鏈接庫,因此在cmakelists檔案中補充相關靜態鏈接庫,如下所示,問題解決
target_link_libraries(rtsp_camera
${OpenCV_LIBRARIES}
${catkin_LIBRARIES}
/usr/local/lib/libopencv_videoio.so
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/337844.html
標籤:其他
上一篇:ubuntu 訓練darknet-yolov4遇到的問題合集。(bus error,Segmentation fault(core dumped))
