Summary:Transparent API与UMat
Author: Amusi
Date: 2018-03-12
UMat(Unified Matrix)[1]是OpenCV3.0引入的新特性,属于OpenCV Transparent API(T-api or TAPI),主要用来提升性能。
1 Transparent API(T-api or TAPI)
介绍UMat之前,先介绍一下OpenCV Transparent API[2]:
Transparent API 是一种简单的方法,其对现有代码进行最小的更改,便可以将硬件加速无缝地添加到OpenCV代码中。通过进行很小的更改, 可以使现有代码提高数量级的加速。
使用Transparent API 非常简单。通过更改一个关键字,即可以获得显著的性能提升(如将Mat换成UMat)。
2 UMat
UMat与Mat的最大不同在于,UMat尽可能地调用硬件现有的最好资源,如有GPU的情况下,就不使用CPU。所以一般情况下,可以达到加速的作用!
下面是一个不适用 Transparent API 的标准 OpenCV 代码示例。它读取图像, 将其转换为灰度, 应用高斯模糊, 最后进行精明的边缘检测。
2.1 不使用Transparent API
2.1.1 C++
#include "opencv2/opencv.hpp"
using namespace cv;
int main(int argc, char** argv)
{
Mat img, gray;
img = imread("image.jpg", IMREAD_COLOR);
cvtColor(img, gray, COLOR_BGR2GRAY);
GaussianBlur(gray, gray,Size(7, 7), 1.5);
Canny(gray, gray, 0, 50);
imshow("edges", gray);
waitKey();
return 0;
}
2.1.2 Python
import cv2
img = cv2.imread("image.jpg", cv2.IMREAD_COLOR)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (7, 7), 1.5)
gray = cv2.Canny(gray, 0, 50)
cv2.imshow("edges", gray)
cv2.waitKey();