小编Sam*_*mer的帖子

如何制作const引用的元组?

说有两个功能:

void ff( const std::tuple<const int&> ) { }

template < typename TT >
void gg( const std::tuple<const TT&> ) { }
Run Code Online (Sandbox Code Playgroud)

并调用这些函数:

int xx = 0;
ff( std::tie( xx ) ); // passes
gg( std::tie( xx ) ); // FAILS !!
Run Code Online (Sandbox Code Playgroud)

GCC 4.7.2无法编译最后一行并报告错误说明,如:

note:   template argument deduction/substitution failed:
note:   types ‘const TT’ and ‘int’ have incompatible cv-qualifiers
note:   ‘std::tuple<int&>’ is not derived from ‘std::tuple<const TT&>’
Run Code Online (Sandbox Code Playgroud)

第一个问题是,如果这符合C++ 11标准,如果不符合,那么为什么呢?

此外,要克服这个问题,需要传递一个const引用元组,gg而不是传递一个非const引用元组(这std::tie使得).这可以通过以下方式完成:

gg( std::tie( std::cref(x) ) );
Run Code Online (Sandbox Code Playgroud)

然而,额外的调用std::cref …

c++ gcc tuples tie c++11

13
推荐指数
1
解决办法
5024
查看次数

C++对象销毁

我正在从java转向c ++,我试图理解构造/破坏对象.在java时,我这样做

Myclass c=createANewObject();
c=createANewObject();
Run Code Online (Sandbox Code Playgroud)

旧的c是垃圾收集的,另一个是用同一个名称创建的.

如果我尝试在c ++中做同样的事情我会得到奇怪的行为.

class my_class 
{
string content;
time_t t;
public: 
my_class(string c);
~my_class();
};

my_class::my_class (string c) 
{
content=c;
cout<<"Init -" << content << "-" << t <<endl;
}

my_class::~my_class()
{
cout<<"Destroyed -" << content << "-" << t <<endl;

}

my_class get_new_object(string s)
{
   my_class c(s);
   return   c;
}

int main()
{
    my_class c=get_new_object("A");
    c=get_new_object("B");
}
Run Code Online (Sandbox Code Playgroud)

而不是得到

Init -A-
Init -B-
destr.A
destr.B
Run Code Online (Sandbox Code Playgroud)

因为首先我创建A,然后创建B,然后A被销毁,并且范围结束,因此B被销毁

我明白了

Init -A-1456178128 Init -B-1456178131 Destr.B-1456178131 Destr.B-1456178131

所以我的A被创造而不被摧毁,而B ......被摧毁了两次?

c++

7
推荐指数
2
解决办法
897
查看次数

旋转矩阵openCV

我想知道如何为一组框架中的一组特征找到旋转矩阵.我会更具体.我有2个帧,有20个特征,比如帧1和帧2.我可以估计两个帧中的特征的位置.例如,假设位置(x,y)处的某个第1帧特征,我确切地知道它在哪里,所以让我们说(x',y').

我的问题是功能被移动并可能旋转,所以我想知道如何计算旋转矩阵,我知道2D的旋转矩阵:

替代文字

但我不知道如何计算角度,以及如何做到这一点?我试图在OpenCV中的函数,而cv2DRotationMatrix();但正如我上面我所提到的问题,不知道如何来计算旋转矩阵,并且它提供了2×3的矩阵,另一个问题的角度,所以如果不会制定出事业我将借此20×2矩阵,(20是特征的数量和2是在(X,Y)的位置),并通过由2*3矩阵,其是从该函数的结果相乘,然后我会得到20*3矩阵,它似乎不太现实,因为我正在使用2D.
所以我该怎么做?更具体一点,请告诉我如何计算在矩阵中使用它的角度?

math opencv

6
推荐指数
1
解决办法
3484
查看次数

我应该按值传递字符串还是将指针传递给它?

我有一个看起来像这样的功能

int myclass::setVersion(std::string ver)
{
  if (ver.size()>1)
  {
    version.swap(ver)
    return 0;
  }
  else 
    return -1;
}
Run Code Online (Sandbox Code Playgroud)

我的问题非常简单,是否更好地传递ver它的方式或更好地将其作为指向字符串的指针传递?仅供参考,ver是一个小尺寸的字符串(约8).编辑:如果ver改变也没关系.我只想替换version内容ver.编辑2:我正在使用visual studio 2008.

c++ string parameter-passing

5
推荐指数
2
解决办法
3942
查看次数

如何在PCL上获取相机的参数?

我安装了PCL1.7.2.我正在尝试使用PCL库.

我想通过"const"显示相机的参数,所以,我想得到相机的参数.但我不明白如何获取相机的参数.

我看到了"pcl :: visualization :: Camera Class Reference". http://docs.pointclouds.org/trunk/classpcl_1_1visualization_1_1_camera.html

我知道"相机"对象上有焦点,位置,视图等.

现在我已确认以下代码运行.

但我无法理解如何获得Camera的成员.这是设置Camera的成员值的方法.viewer.setCameraPosition(pos_x,pos_y,pos_z,view_x,view_y,view_z,up_x,up_y,up_z,viewport);

所以,有人请告诉我如何使用以下代码获取Camera的参数.

这是现在的道路来源.

#include "stdafx.h"
#include <pcl/visualization/cloud_viewer.h>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/pcd_io.h>
int user_data=0;

void
viewerOneOff(pcl::visualization::PCLVisualizer& viewer)
{
    viewer.setBackgroundColor(1.0, 0.5, 1.0);
    pcl::PointXYZ o;
    o.x = 1.0;
    o.y = 0;
    o.z = 0;
    viewer.addSphere(o, 0.25, "sphere", 0);
    std::cout << "i only run once" << std::endl;

}

void
viewerPsycho(pcl::visualization::PCLVisualizer& viewer)
{
    static unsigned count = 0;
    std::stringstream ss;
    ss << "Once per viewer loop: " << count++;
    viewer.removeShape("text", 0); …
Run Code Online (Sandbox Code Playgroud)

c++ point-cloud-library visual-studio-2013

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

使用 opencv 通过反卷积去模糊图像

我有两个图像o1& o2,并且我使用相同的高斯模糊内核模糊了这两个图像。然后我找到了内核k1 = DFT(b1) / DFT (o1)b1模糊得到的图像在哪里o1

我已使用此内核 ( k1) 对通过模糊获得的b2位置执行反卷积。b2o2

但是去模糊输出不正确(输出图像与原始图像没有任何关系)我的代码有什么问题?

int main(int argc, char** argv) 
{
  Mat orig1 = imread(argv[1], 0);
  Mat orig2 = imread(argv[2], 0);

  Mat blur1, blur2;
  GaussianBlur(orig1, blur1, Size(11, 11), 0, 0 );
  GaussianBlur(orig2, blur2, Size(11, 11), 0, 0 );

  imshow("or1", orig1);
  imshow("bl1", blur1);
  imshow("or2", orig2);
  imshow("bl2", blur2);
  waitKey(0);



  deconvolution(orig1, blur1, orig2, blur2);

  return 0;
}
void deconvolution(Mat & o1, Mat …
Run Code Online (Sandbox Code Playgroud)

c++ opencv image-processing deconvolution

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

opencv拼接与免费DLL

我的项目中有一个函数可以拼接,功能很好,很简单:

Mat output(m_Img, true), pano; // a panaoramic image

    bool try_use_gpu = true;
    Stitcher iSticher = Stitcher::createDefault(try_use_gpu);   
    // Set Feature finder to be ORB
    iSticher.setFeaturesFinder(new detail::OrbFeaturesFinder());

    try{

        Stitcher::Status status = iSticher.stitch(Imgs, pano);
        if (status != Stitcher::OK)
        {
            LOG("Error stitching - Code: %d", int(status));
            return -1;
        }
    }
    catch(exception e)
    {
        LOG("Cannot Stitch Image,%s",e.what());
    }
Run Code Online (Sandbox Code Playgroud)

代码运作良好,我能够很好地缝合图像.唯一的问题是,当我想部署我的代码时,我意识到我必须使用非自由的dll.否则,.exe将无法运行.我的问题是:为了使用Stitcheropencv中的类,这意味着你必须支付,即使你没有使用SURFSIFT算法?有没有办法在不使用"nonfree dlls"的情况下做到这一点?注意:我正在使用opencv 2.4.2.编辑:我也用它测试过OpenCV 2.4.11

c++ dll opencv opencv-stitching

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

yaml-cpp 的编译器错误 - 未定义对 `YAML::detail::node_data::convert_to_map` 的引用

这是完整的日志:

/tmp/ccCvErNZ.o: In function `YAML::detail::node& YAML::detail::node_data::get<std::string>(std::string const&, std::shared_ptr<YAML::detail::memory_holder>)':
cricket.cpp:(.text._ZN4YAML6detail9node_data3getISsEERNS0_4nodeERKT_St10shared_ptrINS0_13memory_holderEE[_ZN4YAML6detail9node_data3getISsEERNS0_4nodeERKT_St10shared_ptrINS0_13memory_holderEE]+0x94): undefined reference to `YAML::detail::node_data::convert_to_map(std::shared_ptr<YAML::detail::memory_holder>)'
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

我试图编译的代码很简单

#include <iostream>
#include <yaml-cpp/yaml.h>

using namespace std;

int main() {
    YAML::Node test = YAML::LoadFile("test.yaml");
    if (test["date"]) {
      cout << "HELLO";
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我使用的 YAML 是来自http://www.yaml.org/start.html的示例

如果我只是尝试加载 YAML,它加载得很好。但是,如果我尝试访问任何数据,则会出现相同的错误。所以这不是链接问题。

编辑:我可以做这样的事情cout << test,并cout << test.type()和其他功能。我认为问题在于使用基于字符串的映射来访问内部节点。

c++ yaml undefined-reference yaml-cpp

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

UDP sendto()错误:参数无效

我们正在尝试应用基于UDP的协议,并且在sendto()函数中存在一些问题.

当我们尝试用ack响应写请求时,我们从sendto()函数得到"无效参数"

这是我们的代码:

int                sock;                  // Socket 
sockaddr_in_t      echoServAddr;          // Local address 
sockaddr_in_t      echoClntAddr;          // Client address 
unsigned int       cliAddrLen;            // Length of incoming message
data_packet_t      echoBuffer;
wrq_packet_t       wrqBuffer;
unsigned short     echoServPort;          // Server port 
int                recvMsgSize;           // Size of received message 
ack_packet_t      Ack;
struct timeval     timeout;
fd_set             fds;



/* Create socket for sending/receiving datagrams */
if ((sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0) perror("TTFTPERROR: socket() failed"); 

/* Construct local address structure */
memset(&echoServAddr, 0, sizeof(echoServAddr));
echoServAddr.sin_family = AF_INET;
echoServAddr.sin_addr.s_addr …
Run Code Online (Sandbox Code Playgroud)

c udp

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

在 kernel32.dll 中找不到 GetOverlappedResultEx

我正在尝试创建一个使用 dll 进行管道通信的应用程序,并在我开始使用此函数时遇到此错误GetOverlappedResultEx。每当我运行使用我的 dll 的可执行文件时,我都会收到此错误消息......有谁知道它的含义是什么?我正在构建 64 位 dll!我在 Visual Studio 2012 上使用 C++。我需要安装任何服务包吗?编辑:我使用的是 Windows 7 计算机

在此处输入图片说明

c++ dll kernel named-pipes visual-studio-2012

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