我想知道是否有任何方法可以使用OpenCV(C ++)在单个数据结构中保存(或存储)不同大小的图像。例如,在MATLAB中我可以使用“cell”来完成。
具体来说,我生成的结果是不同大小的图像,如果我可以将它们存储在单个数据结构中,我将感激不尽。所以,我可以在后期使用它。 请注意,这必须使用C ++和OpenCV完成。
我正在尝试使用:std :: vector。非常感谢。
答案 0 :(得分:3)
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);
}
答案 1 :(得分:2)
我认为这个问题存在于你对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
- 如果您打算经常修改容器的大小,这比vector更好。cv::Mat *crazyPointers[33]
- 当你有一些大的物体可以移动时,最好只移动它们所在位置的信息,而不是物体。cv::Mat
做一些内部使用它的数据,所以不应该这样。