1.APEX CV简介
在S32V中,很多我们常用的open cv操作函数被封装为了APEX CV library,每个操作以类的形式提供使用,而APEX CV又被分为
APEX-CV Base Library 和 APEX-CV Pro Library。
-
APEX-CV Base Library
• Arithmetic Operations:
– Absolute value
– Absolute difference
– Accumulate
– Accumulate squared
– Accumulate weighted
– Addition
– Bitwise AND, NOT, OR, XOR– Count Leading Zeros
– Magnitude
– Subtraction
– Table Lookup
– Thresholding (binary)
– Thresholding (range)
• Interpolation Operations:
– Linear Grayscale– Bilinear Grayscale– Bicubic Grayscale
• Color Conversion and Channel Manipulation Operations:
– Color conversion and color rotation
– Color conversion and color rotation (optimized)– Extract Channel
– Insert Channel
– Split Channel
– Merge Channel
• Image Filters Operations:
– Bilateral filter
– Box filter
– Box filter (optimized)
– Census filter
– Convolve filter
– Convolve filter (optimized)
– Derivative X filter (optimized)– Derivative Y filter (optimized)– Dilate filter
– Erode filter
– Gaussian filter
– Median filter
– Prewitt X filter
– Prewitt Y filter
– Saturate filter (optimized)
– Separable filter (optimized)– Sobel filter
– Sobel filter (optimized)
– Sobel X filter
– Sobel X filter (optimized)
– Sobel Y filter
– Sobel Y filter (optimized)
– Sobel XY filter
• Histogram
• Integral Image
-
APEX-CV Pro Library
•APEX-CV Feature Detection Library
- Block Matching
- Binary Robust Independent Elementary Features
- Oriented Fast and Rotated BRIEF
- Canny Edge Detector
- GFTT/HARRIS Corner Detector
- HOG Object Detector
- Aggregated Channel Feature Based Pedestrian Detector• Hough Line Detector
- FAST9 corner detection
•APEX-CV Image Pyramid Library
- Gaussian Image Pyramid
- Multi-scale Gaussian Image Pyramid• Laplacian Image Pyramid
•APEX-CV Image Transform Library
- Affine Transformation
- Histogram Equalization
- Image Remap
- Image Resize
- Tone Mapping Operation
• APEX-CV Feature Tracking Library
- Single-Scale Lucas-Kanade Optical Flow• Multi-Scale Lucas-Kanade Optical Flow
2.APEX CV用法
一般在需要某个功能时,在library中搜索,基本的使用方法比较固定:找到相应的头文件,初始化APEX-CV类(Initialize),如果使用过程中需要改变操作输入输出流,需要重新构建输入输出流(ReconnectIO),调用处理方法执行整个操作(Process)。
这里以图像常用的边缘检测操作--Canny为例进行介绍:
apexcv::Canny canny_op;
lRetVal |= canny_op.Initialize(in, out, 1280, 720, 20, 80, 3);
if(!lRetVal) {
cout << "Initialize failed!" << endl;
}
lRetVal |= canny_op.ReconnectIO(in, out, 1280, 720);
if(!lRetVal) {
cout << "ReconnectIO failed!" << endl;
}
lRetVal |= canny_op.Process();
if(!lRetVal) {
cout << "Process failed!" << endl;
}
几乎所有的APEX CV类都可以用这种类似操作进行使用,唯一不同的是不同的类中会有不同参数,用法和参数都可以查阅s32v234_sdk中的相关手册,比较坑的一点是这些API文档都比较简略,每一个类只是介绍参数列表,没有相关用法说明和demo示例,需要自己测试使用。
另外一个关键点是每个使用的APEX CV类不但要找到其头文件,还要找到相对应的静态库(.a文件),引用到项目中。依然以Canny举例如何在DS中引入静态库:
首先介绍一下DS,DS全称是NXP S32 Design Studio,是一个专门用于编写S32V程序的IDE
这款IDE是基于eclipse修改的,所以如果你是eclipse的使用者,那么上手S32 Design Studio是一件很轻松的事
S32 Design Studio拥有Windows和Linux两个操作系统的版本,个人建议使用Linux环境来进行开发,因为如果使用Windows版本进行编译会极其的慢,一个项目在Windows上编译要一分钟多,而在Linux中只需要十几秒就能完成。
回到我们的主题,要在S32 Design Studio中为我们的项目加入所需的静态库,需要右键项目 -> Properties -> C/C++ General -> Paths and Symbols ,在Library Paths中加入包含.a静态库的目录路径,在Libraries中加入静态库名
要注意的是要在静态库文件名前加“lib”,否则将无法找到该文件,如在s32v234_sdk中Canny的静态库文件名为apexcv_pro_canny.a,需更名为libapexcv_pro_canny.a
至此,引用APEX CV相关的编译问题就基本完成,在使用过程中如果没有找到想用CV操作,如透视变换等,可以研究一下官方Dome,这里有一些在APEX CV library中没有的但已经实现好的类可以使用。