1. 目的
- 判断图像中哪些物体处于同一个水平面上,通过鼠标点击获得图片中各个物体的坐标。
- 初步了解OpenCV、回调函数、进程的阻塞与挂起。
如下图所示,判断哪些神经元处于同一个水平切面上,图片来源于https://wormatlas.org/cellIDhead1.html
2. 原理
2.1 OpenCV介绍
OpenCV中文官方文档:https://www.woshicver.com/
OpenCV是计算机视觉中经典的专用库,其支持多语言、跨平台,功能强大。
参考:https://segmentfault.com/a/1190000044071469
OpenCV的应用领域:
- 人脸识别和物体识别:这是OpenCV的一项重要功能,应用在许多领域,如安全监控、交互设计等。
- 图像和视频分析:如图像增强、图像分割、视频跟踪等。
- 图像合成和3D重建:在图像处理和计算机视觉领域,OpenCV可以用于创建AR或VR效果,生成3D模型等。
- 机器学习:OpenCV内置了大量的机器学习算法,可以用于图像分类、聚类等任务。
- 深度学习:OpenCV中的dnn模块提供了一系列深度学习模型的接口,用户可以加载预训练模型进行图像识别、目标检测等任务。
2.2 回调函数
回调函数是指一个函数被作为参数传递给另一个函数,并在另一个函数执行到某个特定点时被调用。
2.3 进程阻塞与挂起的区别
阻塞操作
- I/O 操作: 例如读取文件、网络连接、等待用户输入等。这些操作需要等待外部资源,进程会阻塞直到资源可用。
- 同步锁: 当多个线程需要访问共享资源时,使用同步锁来保证数据一致性。当一个线程获取了锁,其他线程就会被阻塞,直到该线程释放锁。
- 信号量: 类似于同步锁,信号量用于控制对有限资源的访问。当信号量计数为 0 时,线程会被阻塞,直到其他线程释放资源。
- 等待事件: 线程可以等待某个事件发生,例如某个条件满足或其他线程发出信号。在等待期间,线程会被阻塞。
挂起操作
- 进程/线程切换: 操作系统会根据调度策略,将当前运行的进程或线程挂起,并切换到其他进程或线程。
- 睡眠: 进程或线程可以调用 sleep() 函数进入休眠状态,等待指定时间后自动唤醒。
- 等待唤醒: 进程或线程可以等待某个信号或事件,例如收到消息或被其他进程唤醒。
一些说明: