*                                                 联系方式:
 *                                                 QQ:2468851091 call:18163325140
 *                                                 Email:2468851091@qq.com
 *

/ ****************************************************************************/

# -*- coding: utf-8 -*-
# This file is part of the Horus Project__author__ = 'Jes煤s Arroyo Torrens <jesus.arroyo@bq.com>'
__copyright__ = 'Copyright (C) 2014-2016 Mundo Reader S.L.'
__license__ = 'GNU General Public License v2 http://www.gnu.org/licenses/gpl2.html'import cv2  ##导入OPENCV库存,因为三维扫描需要用到相机内参校正所以要用OPENCV.from horus import Singleton
from horus.engine.driver.driver import Driver##导入驱动,这个驱动包括软件与硬件的所有引擎。因为本项目##还会有开源硬件。
from horus.engine.calibration.calibration_data import CalibrationData##精度数据校正,这个库主要是对相机
##内部畸变参数进行校正。class CameraSettings(object):def __init__(self):self.driver = Driver()self.selected = Falseself.brightness = 0self.contrast = 0self.saturation = 0self.exposure = 0def set_brightness(self, value):##亮度self.brightness = valueif self.selected:self.driver.camera.set_brightness(value)def set_contrast(self, value):##对比度self.contrast = valueif self.selected:self.driver.camera.set_contrast(value)def set_saturation(self, value):##饱和度self.saturation = valueif self.selected:self.driver.camera.set_saturation(value)def set_exposure(self, value):##曝光度self.exposure = valueif self.selected:self.driver.camera.set_exposure(value)def send_all_settings(self):##图像各项数据发送self.driver.camera.set_brightness(self.brightness)self.driver.camera.set_contrast(self.contrast)self.driver.camera.set_saturation(self.saturation)self.driver.camera.set_exposure(self.exposure)@Singleton
class ImageCapture(object):def __init__(self):self.driver = Driver()self.calibration_data = CalibrationData()self.texture_mode = CameraSettings()self.laser_mode = CameraSettings()self.pattern_mode = CameraSettings()self.stream = Trueself._mode = self.pattern_modeself._mode.selected = Trueself._remove_background = Trueself._updating = Falseself.use_distortion = Falsedef initialize(self):self.texture_mode.initialize()self.laser_mode.initialize()self.pattern_mode.initialize()def set_flush_values(self, texture, laser, pattern):self._flush_texture = textureself._flush_laser = laserself._flush_pattern = patterndef set_flush_stream_values(self, texture, laser, pattern):self._flush_stream_texture = textureself._flush_stream_laser = laserself._flush_stream_pattern = patterndef set_use_distortion(self, value):self.use_distortion = valuedef set_remove_background(self, value):self._remove_background = valuedef set_mode(self, mode):if self._mode is not mode:self._updating = Trueself._mode.selected = Falseself._mode = modeself._mode.selected = Trueself._mode.send_all_settings()self._updating = Falsedef set_mode_texture(self):self.set_mode(self.texture_mode)def set_mode_laser(self):self.set_mode(self.laser_mode)def set_mode_pattern(self):self.set_mode(self.pattern_mode)def flush_texture(self):self.set_mode_texture()self.capture_image(flush=0)def flush_laser(self):self.set_mode_laser()self.capture_image(flush=0)def flush_pattern(self):self.set_mode_pattern()self.capture_image(flush=0)def capture_texture(self):self.set_mode(self.texture_mode)if self.stream:flush = self._flush_stream_textureelse:flush = self._flush_textureimage = self.capture_image(flush=flush)return imagedef _capture_laser(self, index):self.set_mode(self.laser_mode)self.driver.board.lasers_off()self.driver.board.laser_on(index)if self.stream:flush = self._flush_stream_laserelse:flush = self._flush_laserimage = self.capture_image(flush=flush)self.driver.board.laser_off(index)return imagedef capture_laser(self, index):# Capture backgroundimage_background = Noneif self._remove_background:self.driver.board.lasers_off()if self.stream:flush = self._flush_stream_laserelse:flush = self._flush_laserimage_background = self.capture_image(flush=flush)# Capture laserimage = self._capture_laser(index)if image_background is not None:if image is not None:image = cv2.subtract(image, image_background)return imagedef capture_lasers(self):# Capture backgroundimage_background = Noneif self._remove_background:self.driver.board.lasers_off()if self.stream:flush = self._flush_stream_laserelse:flush = self._flush_laserimage_background = self.capture_image(flush=flush)# Capture lasersimages = [None, None]images[0] = self._capture_laser(0)images[1] = self._capture_laser(1)if image_background is not None:if images[0] is not None:images[0] = cv2.subtract(images[0], image_background)if images[1] is not None:images[1] = cv2.subtract(images[1], image_background)return imagesdef capture_all_lasers(self):image_background = Noneself.set_mode(self.laser_mode)if self.stream:flush = self._flush_stream_laserelse:flush = self._flush_laserif self._remove_background:self.driver.board.lasers_off()image_background = self.capture_image(flush=flush)self.driver.board.lasers_on()image = self.capture_image(flush=flush)self.driver.board.lasers_off()if image_background is not None:if image is not None and image_background is not None:image = cv2.subtract(image, image_background)return imagedef capture_pattern(self):self.set_mode(self.pattern_mode)if self.stream:flush = self._flush_stream_patternelse:flush = self._flush_patternimage = self.capture_image(flush=flush)return imagedef capture_image(self, flush=0):image = self.driver.camera.capture_image(flush=flush)if self.use_distortion:if image is not None and \self.calibration_data.camera_matrix is not None and \self.calibration_data.distortion_vector is not None and \self.calibration_data.dist_camera_matrix is not None:image = cv2.undistort(image,##利用OPENCV内部函数校正数据。self.calibration_data.camera_matrix,self.calibration_data.distortion_vector,None,self.calibration_data.dist_camera_matrix)return image

Ciclop开源3D扫描仪软件---Horus源码分析之Image_capture.py相关推荐

  1. Ciclop开源3D扫描仪软件---Horus编译过程

    1.首先在   https://github.com/LibreScanner/horus 点击打开链接下载源码. 2.参照上图中的import导入的模块,在LINUX下全部安装一遍. 3.如果你用的 ...

  2. 微软开源软件特征源码分析工具 Application Inspector

    微软近日开源了其内部使用的软件特征源码分析工具 Application Inspector. 现代软件开发实践通常需要基于数百个现有组件中构建应用,无论它们是由组织中的另一个团队.外部供应商还是开源社 ...

  3. EduSoho,中国首款结合云计算的开源在线教育软件,源码下载

    EduSoho,是中国首款结合云计算的开源在线教育软件,是一款B2C独立网校系统,适合企业及个人快速构建个性化在线网络课堂平台.系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序.由杭州阔 ...

  4. (4.2.40)阿里开源路由框架ARouter的源码分析

    一需求背景 1 Android原生方案的不足 2 自定义路由框架的适用场景 3 对自定义路由框架的设想 二ARouter的概述 三ARouter的引入和使用 四源码分析 1 arouter-annot ...

  5. 关于一款开源远程控制软件(gh0st)的源码分析(一)

    2020注定是不平凡的一年,前有冠状病毒的肆虐,全国上下都笼罩在一种紧张而又不安的氛围下:因为疫情的严重性,使我被迫享受了学生时代的超长假期.闲来无事,就分析了一下那些静静地躺在我磁盘里的开源软件源码 ...

  6. Linux下存储多路径软件MultiPath源码分析

    2019独角兽企业重金招聘Python工程师标准>>> 全局概览 测试环境为CentOS 7 X64 从RPM获取源码 $ cd ~/rpmbuild/ $ yumdownloade ...

  7. vs2008编译QT开源项目--太阳神三国杀源码分析(一) 项目编译及整体分析

    请参看 http://tieba.baidu.com/f?kz=1508964881 按照上面的网址教程,下载三国杀源码,swig工具,并下载最新的QT4.8.2 for vs2008.我本机已经安装 ...

  8. 开源中国 OsChina Android 客户端源码分析(7)二维码生成对话框

    为什么80%的码农都做不了架构师?>>>    功能描述:主界面中点击"我"进入个人中心, 点击右侧二维码图标,弹出附有个人信息的二维码对话框. 1源码中的布局文 ...

  9. Miracle密码算法开源库(一)源码分析 :mraes.c

    2021SC@SDUSC 山东大学软件学院软件工程应用与实践 一.mraes.c结构 mraec.c的总体结构如下,具有fbsub.ftable1等数组,主要实现了aes_decrypt .aes_e ...

最新文章

  1. 年均增长超200%的网易云信,如何向PaaS行业领跑者再进一步?
  2. KubeOperator总体介绍(K8S集群部署管理工具)
  3. SAP UI5 WebIDE里使用Mock数据的工作原理介绍
  4. vue与php接口对接,怎样使用vue项目中api接口
  5. 转:智能卡测试操作系统技术
  6. matlab搭建的应用层架构逻辑,软件设计的三层架构
  7. 为何主程序退出了,创建的多线程还在运行呢?
  8. 重磅官宣!统一操作系统UOS正式版发布
  9. C#中Lambda表达式总结
  10. 有网友怒斥吾教程坑了他,阿弥陀佛
  11. 多个客户端共用同一条拉起链接 ,如何配置 Universal Link iOS App
  12. 项目经理之初为项目经理
  13. CAD转KML乱码处理
  14. ip变更导致连接不到mysql的解决办法
  15. 拼多多,是漏洞的损失?还是营销的手段?
  16. Hello World, Hello, 2021
  17. 脉歌蓝牙耳机线评测_脉歌 TE-40 蓝牙耳机“升级线”体验
  18. 玩转 ssh 免密登录配置:使用两个环境模拟配置成功和其他几种失败的情况
  19. 都在这儿!最全的北斗厂家企业名单!
  20. 2015年09月29日

热门文章

  1. 基于h5 canvas的模拟时钟javascript程序
  2. 电子招投标管理系统源码-电子招投标认证服务平台-权威认证
  3. FM25V01铁电存储器驱动移植
  4. Linux系统主引导扇区MBR详解
  5. ISACA将于2016年6月更新CISA考试大纲
  6. 【附源码】计算机毕业设计SSM日租房管理系统
  7. ubuntu 迅雷 XwareDesktop
  8. python培训视频课 知乎
  9. 北风网web前端开发培训课程 web前端开发实例视频教程下载
  10. 规则引擎ILog和CKRule的对比