小编Vic*_*ine的帖子

如何在 MJPEG 中使用 boost.Asio?

我想将 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)

c++ opencv http mjpeg boost-asio

5
推荐指数
1
解决办法
1660
查看次数

如何在Qt5中获得系统QFileDialog?

我创建了文件对话框来选择Qt应用程序中的文件.迁移到Qt5时遇到回归,当链接Qt5而不是Qt4时,文件对话框要差得多:

Qt4的

Qt4文件对话框

QT5

Qt5文件对话框

例如,用户很难导航到网络安装的共享目录.

代码就像这样简单:

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那么我得到这个:

在此输入图像描述

ubuntu qt qfiledialog qt5 ubuntu-16.04

5
推荐指数
1
解决办法
1104
查看次数

BackgroundSubtractorMOG2和OpenCV

我正在尝试编译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)

意思是:未定义引用... …

opencv background-subtraction

4
推荐指数
1
解决办法
1万
查看次数

为什么这段代码会编译

我不明白为什么这段代码编译并运行没有错误:

#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++ eigen

2
推荐指数
1
解决办法
821
查看次数