取消引用指向 cv::Mat 的“cv::Mat*”指针以接收 Gstreamer 视频并在 OpenCV 中使用
Dereferencing " cv::Mat* " pointer to cv::Mat to Receive Gstreamer Video and Use in OpenCV
我正在努力从源接收视频流。 (凉亭模拟)
首先,我在python端成功接收,但我想移动代码C++。
这是 python 代码:
Python code
我还可以使用以下方法轻松地将跟踪器添加到 python:
video = Video()
frame = video.frame()
bbox = (287, 23, 86, 320)
ok = tracker.init(frame, bbox)
但是当我尝试在 C++ 上做同样的事情时,不可能轻易通过这些步骤。我使用了这段代码并且工作正常:
C++ Code Gstream
但是我不能像opencv那样使用。关键代码行是:
// Main loop
while(1) {
g_main_iteration(false);
cv::Mat* frame = atomicFrame.load();
if(frame) {
cv::imshow("Frame", frame[0]);
cv::waitKey(30);
}
}
当我尝试添加基本文本时:
putText(frame[0], " Hello", Point(100,20), FONT_HERSHEY_SIMPLEX, 0.75, Scalar(50,170,50),2);
我越来越努力了"Segmentation fault"。
我也试过用单线正常接收视频:
VideoCapture video("udpsrc port=5600 ! application/x-rtp, payload=96 ! rtph264depay ! h264parse ! avdec_h264! decodebin ! videoconvert ! video/x-raw,format=(string)BGR ! videoconvert! appsink name=sink emit-signals=true sync=false max-buffers=1 drop=true",CAP_GSTREAMER);
但是视频打不开
不再需要将 cv::Mat* 转换为 cv::Mat。而且,这也不符合逻辑。
这是在 Gazebo Simulation 中正常工作的当前管道:
VideoCapture video("udpsrc port=5600 ! application/x-rtp,payload=96,encoding-name=H264 ! rtpjitterbuffer mode=1 ! rtph264depay ! h264parse ! decodebin ! videoco
我正在努力从源接收视频流。 (凉亭模拟) 首先,我在python端成功接收,但我想移动代码C++。 这是 python 代码: Python code 我还可以使用以下方法轻松地将跟踪器添加到 python:
video = Video()
frame = video.frame()
bbox = (287, 23, 86, 320)
ok = tracker.init(frame, bbox)
但是当我尝试在 C++ 上做同样的事情时,不可能轻易通过这些步骤。我使用了这段代码并且工作正常: C++ Code Gstream
但是我不能像opencv那样使用。关键代码行是:
// Main loop
while(1) {
g_main_iteration(false);
cv::Mat* frame = atomicFrame.load();
if(frame) {
cv::imshow("Frame", frame[0]);
cv::waitKey(30);
}
}
当我尝试添加基本文本时:
putText(frame[0], " Hello", Point(100,20), FONT_HERSHEY_SIMPLEX, 0.75, Scalar(50,170,50),2);
我越来越努力了"Segmentation fault"。
我也试过用单线正常接收视频:
VideoCapture video("udpsrc port=5600 ! application/x-rtp, payload=96 ! rtph264depay ! h264parse ! avdec_h264! decodebin ! videoconvert ! video/x-raw,format=(string)BGR ! videoconvert! appsink name=sink emit-signals=true sync=false max-buffers=1 drop=true",CAP_GSTREAMER);
但是视频打不开
不再需要将 cv::Mat* 转换为 cv::Mat。而且,这也不符合逻辑。
这是在 Gazebo Simulation 中正常工作的当前管道:
VideoCapture video("udpsrc port=5600 ! application/x-rtp,payload=96,encoding-name=H264 ! rtpjitterbuffer mode=1 ! rtph264depay ! h264parse ! decodebin ! videoco