2015-03-02 67 views
1

我正在尝试从另外两个矩阵生成一个cv :: Mat C,以便得到由矩阵A和B的一维点组合产生的二维点产生的第三个矩阵。将cv :: Mat A的每个成员与cv :: Mat B合并,以创建一个具有[a(x,y),b(x,y)]的cv :: Mat C

我的问题是,只尝试连接矩阵,并没有真正地将每个点与另一个点合并,这将导致2D点的3-D矩阵。

有没有人可以帮助我解决这个问题?

非常感谢。

只是为了更清楚:

我有什么是A = [(0, 1, 2),(3, 4, 5)]B=[(5, 4, 3),(2, 1, 0)],我想创建

C = {[(0,5), (1,4), (2,3)], 
     [(3,2), (4,1), (5,0)]}. 

谢谢

+0

我不认为这样的API在opencv存在,会自动做到这一点。 – marol 2015-03-02 16:59:23

回答

1

您可以通过创建一个自定义类型的矩阵做到这一点。请参阅here

基本上,您需要创建一个处理点(数据对)的DataType类专业化。

或者您可以使用给定的std::complex<double>矩阵而不是整数作为丑陋的快捷方式。文档中的示例代码:

Mat B = Mat_<std::complex<double> >(3, 3); 

但是,此解决方案可能不是真正的解决方案,以您的一般问题。 Google XY问题。

+1

我不会使用std :: complex作为“丑陋的快捷方式”。建议使用已定义的结构,尽管在这种情况下使用std :: pair 会更合适。而且更合适 - cv :: vec2b – marol 2015-03-02 16:56:57

+0

你是对的。我不需要创建这个矩阵。我的问题是我已经校准了相机,但是我需要上传相机矩阵和失真系数,以便实时校准图像。但我仍然不知道该怎么做。至少现在我明白我是在问我Y,而我的真正问题是X. – 2015-03-02 18:46:00