我想将 OpenCV 图像(来自相机)实时广播到远程计算机,必须通过以太网完成。图像在标准 OpenCV Mat 对象中连续接收。最终代码必须集成到 C++ (Qt) 应用程序中。
我发现这个 Python 脚本可以很好地完成这项工作。
现在我正在尝试获得与该代码等效的 C++,我设法使用 Boost Asio 和Simple-Web-Server项目创建了一个 HTTP 服务器。我能够显示静态蓝色图像/网络摄像头图像(未刷新)。
我写了一个代码,但它不起作用。我的猜测是数据仅在函数返回时发送(从不返回)。如何在每次循环迭代后强制发送数据?
#include "server_http.hpp"
#include <thread>
#include <boost/chrono.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/posix_time/posix_time_io.hpp>
#include <opencv2/opencv.hpp>
//#include <opencv/cv.h>
using namespace boost::posix_time;
typedef SimpleWeb::Server<SimpleWeb::HTTP> HttpServer;
cv::Mat image;
cv::VideoCapture cap;
int main()
{
cap.open(0);
if (!cap.isOpened ())
{
std::cerr << "Could not initialize capturing" << std::endl;
return (-1);
}
cap >> image;
HttpServer server(8080, 2);
// Image resource is requested …Run Code Online (Sandbox Code Playgroud) 我创建了文件对话框来选择Qt应用程序中的文件.迁移到Qt5时遇到回归,当链接Qt5而不是Qt4时,文件对话框要差得多:
例如,用户很难导航到网络安装的共享目录.
代码就像这样简单:
QString path;
path = QFileDialog::getExistingDirectory(this, tr("Pick a file"));
Run Code Online (Sandbox Code Playgroud)
QFileDialog::DontUseNativeDialog 什么都不改变.
我的操作系统是Ubuntu 16.04,我安装了nautilus(3.14.3)和nemo(2.8.7).nemo配置为默认文件管理器:
xdg-mime default nemo.desktop inode/directory application/x-gnome-saved-search
Run Code Online (Sandbox Code Playgroud)
每个其他应用程序似乎使用与Qt4文件对话框屏幕截图相同的对话框.
如何在Qt5中获取"旧"文件对话框?
如果我尝试,QT_QPA_PLATFORMTHEME= ./my_app那么我得到这个:
我正在尝试编译http://mateuszstankiewicz.eu/?p=189上的简单示例 我正在运行Ubuntu 12.10 64位.我使用的是OpenCV 2.4.4a
我使用makefile编译,执行此操作:
g++ background_subtraction.cpp -o background_subtraction -I/usr/local/include/opencv -I/usr/local/include/opencv2 -L /usr/local/lib -lm -lopencv_core -lopencv_highgui -lopencv_imgproc -lcvblob
Run Code Online (Sandbox Code Playgroud)
错误:
/tmp/cc0ZWnll.o: dans la fonction « main »:
background_subtraction.cpp:(.text+0x96): référence indéfinie vers « cv::BackgroundSubtractorMOG2::BackgroundSubtractorMOG2() »
background_subtraction.cpp:(.text+0x1f0): référence indéfinie vers « cv::BackgroundSubtractorMOG2::operator()(cv::_InputArray const&, cv::_OutputArray const&, double) »
background_subtraction.cpp:(.text+0x222): référence indéfinie vers « cv::BackgroundSubtractorMOG2::getBackgroundImage(cv::_OutputArray const&) const »
background_subtraction.cpp:(.text+0x61a): référence indéfinie vers « cv::BackgroundSubtractorMOG2::~BackgroundSubtractorMOG2() »
background_subtraction.cpp:(.text+0x7a6): référence indéfinie vers « cv::BackgroundSubtractorMOG2::~BackgroundSubtractorMOG2() »
collect2: erreur: ld a retourné 1 code d'état d'exécution
Run Code Online (Sandbox Code Playgroud)
意思是:未定义引用... …
我不明白为什么这段代码编译并运行没有错误:
#include <iostream>
#include <stdio.h>
#include <Eigen/Dense>
int
main (int argc, char *argv[])
{
typedef Eigen::Matrix<double, 5, 3/*FIXME: Should be 5*/> Matrix5;
Matrix5 test;
test << 2,0,0,1,1,
0,2,0,1,1,
0,0,2,2,2,
0,1,2,0,0,
0,1,1,0,0; // We filled a 5*5 matrix in a 5*3 matrix
//std::cout << "Test matrix:\n" << test << std::endl;
return (0);
}
Run Code Online (Sandbox Code Playgroud)
这是我编译代码的方式:
g++ test_eigen.cpp -o test_eigen -I/usr/include/eigen3 -O3 -DEIGEN_NO_DEBUG
Run Code Online (Sandbox Code Playgroud)
取消注释std::cout,编译,再次运行,您将得到分段错误.我在Ubuntu 14.04上使用Eigen 3.2.0-8.
如建议; 这是Valgrind的输出(带std::cout注释):
$ valgrind ./test_eigen
==12380== Memcheck, a memory error detector
==12380== Copyright …Run Code Online (Sandbox Code Playgroud) c++ ×2
opencv ×2
boost-asio ×1
eigen ×1
http ×1
mjpeg ×1
qfiledialog ×1
qt ×1
qt5 ×1
ubuntu ×1
ubuntu-16.04 ×1