c ++中两个字符串的互相关

时间:2014-09-04 10:49:19

标签: c++ matlab opencv matrix cross-correlation

考虑我有两个矩阵1和0。我希望将其保存为bool Matrix,但opencv不会以这种方式存储,而是将其存储为uchar Mat。因此我的空间增加了8倍。 (每个元素是8位而不是1位)。

我的代码基本如下:

Mat mat1, mat2; //I want each index to be 1 bit 
load(mat1);     //data size is not important in memory
load(mat2);
corr2(mat1, mat2); //this corr2 is same as Matlab's cross correlation.

我做这个部分10M次。因此,加载需要花费很多时间。我的矩阵是1K * 1K,所以我能够将它们存储为1 MB,但我希望它们是128 KB(matlab存储大约为178 KB)。

以下是我的问题:我想将我的矩阵存储为string而不是Mat操作,我想使用字符串。

例如,mat1 and mat2的尺寸为 2 * 8

MAT1:

0 1 0 0 0 0 1 0 (66=B)
0 1 1 1 0 1 1 1 (122=y)

MAT2:

0 1 0 0 0 0 1 1 (67=C)
0 1 1 1 1 0 0 0 (122=z)

我会存储str1=Bystr2=Cz

有没有办法交叉关联str1,str2?

提前致谢,

1 个答案:

答案 0 :(得分:0)

注意:这不是一个答案,而是一个长评论。我发布它作为答案,以避免垃圾邮件发送OP的评论部分。

在任何现代计算机上存储数字类型的1M元素永远不会成为问题。

你应该多学习一下C和内存存储; bool不是元素类型,因此bool存储只是虚拟存在。将几个位打包成char是一个好主意,但如果你想要高效,你应该看看C ++的bitset

了解在硬盘上存储数据的方式与最适合处理活动内存(例如RAM)的格式之间可能存在显着差异。这可能是Matlab存储奇怪尺寸背后的原因;通常需要存储附加信息和/或看似低效的存储单元,以使算法更容易编写,并且基本操作在CPU上执行得更快。

总的来说,我认为切换到" bool-packed chars"像你建议的存储在处理速度方面可以忽略不计,并且肯定会导致编程工作困难并且模糊维护过程。您最好坚持使用字符进行处理,并切换到单点存储以进行磁盘写入操作。