说有两个功能:
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 …
我正在从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 ......被摧毁了两次?
我想知道如何为一组框架中的一组特征找到旋转矩阵.我会更具体.我有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.
所以我该怎么做?更具体一点,请告诉我如何计算在矩阵中使用它的角度?
我有一个看起来像这样的功能
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.
我安装了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) 我有两个图像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) 我的项目中有一个函数可以拼接,功能很好,很简单:
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中的类,这意味着你必须支付,即使你没有使用SURF或SIFT算法?有没有办法在不使用"nonfree dlls"的情况下做到这一点?注意:我正在使用opencv 2.4.2.编辑:我也用它测试过OpenCV 2.4.11
这是完整的日志:
/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()和其他功能。我认为问题在于使用基于字符串的映射来访问内部节点。
我们正在尝试应用基于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) 我正在尝试创建一个使用 dll 进行管道通信的应用程序,并在我开始使用此函数时遇到此错误GetOverlappedResultEx。每当我运行使用我的 dll 的可执行文件时,我都会收到此错误消息......有谁知道它的含义是什么?我正在构建 64 位 dll!我在 Visual Studio 2012 上使用 C++。我需要安装任何服务包吗?编辑:我使用的是 Windows 7 计算机