C++opencv中的Mat数据类型,作为参数函数传递的一些问题

Mat 类型的行为:在 OpenCV 中,Mat 类型用于表示图像或矩阵。当你创建一个 Mat 对象并将其传递给另一个函数时,即使是按值传递,传递的也只是对象的头部信息(包括对实际数据的引用),而不是整个数据。这意味着,即使在函数中对传入的 Mat 对象进行修改,它也会影响原始的 Mat 对象,因为它们共享相同的数据。

引用计数和数据共享:Mat 类型在内部使用了引用计数机制来管理内存。当你创建一个新的 Mat 对象并将其赋值给另一个 Mat 对象时,两者会共享相同的数据,只是引用计数会增加。这种机制使得数据复制非常高效,因为只有在必要时(比如写操作发生时)才会真正复制数据(写时复制机制)。

getContours 函数中的行为:在你的代码中,getContours 函数通过值传递接收 imgDil 和 img。尽管这些是新的 Mat 对象,它们实际上与传入函数的原始 Mat 对象共享相同的数据。因此,当你在 getContours 函数中调用 drawContours 修改 img 时,它实际上修改的是共享的数据,从而影响了原始的图像数据。

你可能感兴趣的:(opencv,c++,opencv,开发语言)