gpt4 book ai didi

c++ - 将 OpenCV 矩阵分配到数据结构中

转载 作者:行者123 更新时间:2023-11-28 01:48:38 26 4
gpt4 key购买 nike

我用 OpenCV 构建了一个多线程系统,它创建了一些图像,将它们分配到一个 vector 中,然后将每个图像发送到不同的线程中。

它是这样的:

std::vector<cv::Mat> images;
for (int i = 0 ; i < 10 ; i++) {
images.push_back(cv::Mat(/* bla bla */));
cv::Mat& mat = images.back();
std::thread(some_function_name, &mat)
}
// Wait here for all threads to join (didn't show its code)

似乎当线程获得指向Mat 对象的指针时,Mat 对象不再存在。有没有可能虽然它被立即分配给了 vector ,但它实际上在循环结束时被销毁了,因为它被从堆栈中删除了?

最佳答案

您的问题实际上是您在循环中调用 push_back,这可能会导致重新分配。如果发生这种情况,底层数据将被复制,因此任何指针或引用都将失效。

要解决这个问题,一种方法是提前调整数组的大小

std::vector<cv::Mat> images(10);
for (int i = 0 ; i < 10 ; i++) {
images[i] = cv::Mat(/* bla bla */);
cv::Mat& mat = images.at(i);
std::thread(some_function_name, &mat)
}
// Wait here for all threads to join (didn't show its code)

关于c++ - 将 OpenCV 矩阵分配到数据结构中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43869835/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com