References
What is opencv?
keywords:
- 英特尔开源的跨平台计算机视觉库;
- BSD 许可证,对研究和商业用途均免费。
- 它具备 C++、Python 和 Java 接口,支持 Windows、Linux、Mac OS、iOS 和 Android 系统。
- OpenCV 旨在提高计算效率,专注于实时应用。它使用优化的 C/C++写成,能够利用多核处理。
opencv VS qt?
- Qt方向是桌面应用、嵌入式应用等开发(GUI library),是一个跨平台应用和UI开发的框架,opencv就是一个图形处理库(CV),很多人也移植到qt上,在嵌入式产品上进行图像处理。opencv也可以用VS开发,支持很多种语言。
- Qt is a cross-platform widget toolkit.
- e.g. 嵌入式,根据产品对界面要求的不同可以选择"Linux"(e.g. 路由器,监控) -> qt(简单的液晶界面) -> Android(手机,游戏机).
Hello World
常用头文件
- include <opencv2/imgcodecs.hpp>
opencv4 删除了videoio 与 highgui 模块中过时的后端支持,包括: QuickTime, QTKit, Unicap, Video for Windows, libv4l, DC1394_V1, Carbon
Get started with Opencv
Parallel
OpenMP是由一组计算机硬件和软件供应商联合定义的应用程序接口(API),%在Visual Studio中支持它,只需要开户即可。OpenMP为基于共享内存的并行程序的开发人员提供了一种便携式和可扩展的编程模型.
project property -> c/c++ -> 多处理器编译->Yes/mp.
- OpenMP主要通过是一些编译的预处理指令实现并行,在C/C++里面形如“#pragma …”这样的东东
而且其目的是要让编写的程序在并行和串行时同时都能正常运行,所以其最大的优点是可以将现行的串行C程序经过不大的更改便成为多线程的。有地方说OpenMP主要是针对循环的并行,INTEL官网这样写:Everyone should use OpenMP as much as they can. It is easy to use, it is standard, it is supported by all major compilers, and it exploits parallelism well. But it is very loop oriented, and does not address algorithm or data structure level parallelism. When OpenMP works for your code, you should use it. We’ve seen it used to great advanatage in financial applications, mp3 codecs, scientific programs and high definition video editing software. OpenMP is best geared for Fortran and C code.
- TBB是Intel公司的产品; CUDA是NVIDA为它的GPU做的线程库(支持的编译器可能少些).
- 如果算法是以阵列处理活动为主导,则在编码复杂程度方面,OpenMP 还是要优于 TBB.
- API 的选用主要还是取决于您想对哪些代码实现并行。如果您的并行模式主要用于内建类型的有界循环(bounded loop),或是平面的 do-loop 中央循环,那么,建议您最好采用 OpenMP。
- 本地线程也不是“一无是处”,它在基于事件或 I/O 的线程化中还是“身手不凡”的。
- 线程化方法的选择是并行应用程序设计流程中的重要环节。没有一款解决方案能够满足所有需求、适用于各种环境
@opencv提供的parallel_for框架整合了这几个.@
Not all computations are suitable / can be adatapted to be run in a parallel way. To remain simple, tasks that can be split into multiple elementary operations with no memory dependency (no possible race condition) are easily parallelizable Computer vision processing are often easily parallelizable as most of the time the processing of one pixel does not depend to the state of other pixels.