📅  最后修改于: 2023-12-03 15:28:55.613000             🧑  作者: Mango
对于 OpenCV 中的图像处理,很多情况下我们需要处理的是 cv::Mat
类型,但是有些情况下我们也可以使用 cv::UMat
类型,它是一个带有上传和下载功能的 OpenCL 类型,并支持由 OpenCL 提供的本地加速。而 Ptr<cv::UMat>
则表示一个指向 cv::UMat
类型对象的指针。
在参数上,如果函数需要传入一个图像,那么如果使用 cv::UMat
类型对象作为参数替代 cv::Mat
类型对象作为参数,可以提高函数的计算速度和处理效率。而关于这种参数类型的预期,我们建议使用 Ptr<cv::UMat>
这种类型指向 cv::UMat
类型的对象。
下面是使用 Ptr<cv::UMat>
的一个例子:
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
void loadImage(Ptr<UMat> img)
{
// 使用 Ptr<cv::UMat> 加载一张图片
*img = imread("example.jpg");
}
int main()
{
// 创建一个 Ptr<cv::UMat> 对象
Ptr<UMat> img = makePtr<UMat>();
// 调用 loadImage 函数处理图片
loadImage(img);
// 显示图片
imshow("Image", *img);
waitKey();
return 0;
}
在这个例子中,我们可以看到 loadImage
函数接收的参数类型为 Ptr<UMat>
,而不是常规的 cv::Mat
。这样,在对图像进行处理之后,我们可以通过 *img
的方式直接获取到处理后的图像。