我想知道是否有任何方法可以使用 OpenCV(C++)在单个数据结构中保存(或存储)不同大小的图像。例如,在 MATLAB 中,我可以使用“cell”来实现。
具体来说,我正在生成我的结果,这些结果是不同大小的图像,如果我可以将它们存储在单个数据结构中,那对我来说会很高兴。这样,我可以晚点使用它。请注意,这必须使用 C++ 和 OpenCV 完成。
我想尝试一下:std::vector。非常感谢。
Yeah you can try this
std::vector<cv::Mat> ImageDataBase;
for(int i=0;i<length_of_imageDataBase;i++)
{
cv::Mat img = cv::imread("Address of the images");
ImageDataBase.pushback(img);
}
我认为问题在于您通常对 C++ 中的对象的思考方式。Matlab 要求对象在一个向量/数组/矩阵中具有相同的大小/但是应该调用它,因为它经过优化以对矩阵进行操作,并且这些操作非常依赖于矩阵的维度。
在 C++ 中,主要实体是一个对象。与 matlab 向量最相似的是一个数组,比如cv::Mat potatoes[30]
. 然而,即使这样也只需要填充同一类的对象,而不管这些cv::Mat
内容的大小。
所以,总结一下,你有几个选择:
cv::Mat crazySocks[42]
- 你需要在这里小心,因为你需要知道会有多少袜子,如果你超出数组范围,你可能会出现分段错误std::vector<cv::Mat> jaguars
- 这是一个好主意,因为 stl 容器可以对它们的内容做一些很好的技巧,并且您可以轻松地修改向量的大小。std::list<cv::Mat> toFind
- 如果您打算经常修改容器的大小,这比向量更好。cv::Mat *crazyPointers[33]
- 当您要移动一些大对象时,最好只移动有关它们所在位置的信息,而不是移动对象。cv::Mat
在内部使用它的数据做一些技巧,所以不应该是这样。