gpt4 book ai didi

c++ - OpenCV:为什么要创建多个 Mat 对象来转换图像格式?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:17:08 25 4
gpt4 key购买 nike

我有一段时间没有使用 OpenCV,所以请耐心等待我的初学者问题。在浏览 OpenCV 教程和示例代码时,我好奇地想到了一些东西。

为什么人们在经历多次变换时会创建多个 Mat 图像?这是一个例子:

Mat mat, gray, thresh, equal;
mat = imread("E:/photo.jpg");
cvtColor(mat, gray, CV_BGR2GRAY);
equalizeHist(gray, equal);
threshold(equal, thresh, 50, 255, THRESH_BINARY);

仅使用两个 Mat 图像的代码示例:

Mat mat, process; 
mat = imread("E:/photo.jpg");
cvtColor(mat, process, CV_BGR2GRAY);
equalizeHist(process, process);
threshold(process, process, 50, 255, THRESH_BINARY);

这两个例子有什么不同吗?另外,另一个初学者问题:OpenCV 只创建两个 Mat 图像时会运行得更快,还是仍然相同?

提前谢谢你。

最佳答案

问题归结为,您稍后在代码中还需要未均衡图像吗?如果您想进一步处理灰度图像,那么第一个选项更好。如果没有,则使用第二个选项。

某些功能可能无法就地运行;具体来说,是将矩阵转换为不同格式的方法,方法是更改​​其尺寸(例如 copyMakeBorder)或 channel 数(例如 cvtColor)。

对于您的用例,两个代码块执行相同数量的计算,因此速度根本不会改变。第二种选择显然内存效率更高。

关于c++ - OpenCV:为什么要创建多个 Mat 对象来转换图像格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31970018/

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