Hadoop+OpenCV的集群化图像处理开发环境建设与测试研究

本文介绍了一种结合Hadoop与OpenCV的集群化图像处理平台,该平台可在大数据背景下大幅提升图像处理速度。文中详细描述了环境搭建过程,并通过实例验证了其有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


本文转载自:http://www.xzbu.com/8/view-7240648.htm


随着科技的发展,各个领域对图像处理要求越来越高,算法也越来越复杂,处理时间也会延长。在大数据时代,图片数量不可计数,想在较短时间内处理完相应数量的图片则需要使用大数据技术。本文则利用Hadoop与OpenCV搭建集群化的图像处理平台,使图像的处理速度得到大幅度的提升。 
  1 相关技术 
  本文结合OpenCV与Hadoop在Linux系统下进行集群化图像处理平台的建设与测试研究。 
  1.1 OpenCV 
  OpenCV[1]是一种基于BSD许可证授权(开源)发行的跨平台计算机视觉库,它由一系列C函数和C++类构成,实现了图像处理和计算机视觉方面的很多通用算法。 
  作为开源软件,OpenCV的优势就在于它有400多个免费的图像处理函数,而且涉及面很广,覆盖了机器视觉的大多应用领域。它的许多算法,也做了很好的优化,对其执行速度带来了可观的提升。 
  1.2 Hadoop 
  Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,充分利用集群进行高速运算和存储,开发分布式程序。 
  Hadoop框架[2]最核心的设计就是:HDFS和MapReduce。HDFS提供存储,MapReduce提供计算。 
  Hadoop设计之初的目标就定位于高可靠性、高可拓展性和高效性,正是这些设计上的优点,使得Hadoop一出现就受到众多大公司的青睐,同时也引起了研究界的普遍关注。 
  2 集群化图像处理的必要性 
  图像处理[3]经过几十年的发展,虽然有很多研究人员都在不停地提高图像处理算法的效率,但针对当代图像处理数据量大、复杂度高等特点,传统的单机处理已达到瓶颈,特别是在Web和搜索引擎的应用上犹为明显。那如何在提高性能的同时,减少时间成本和功耗?并行化图像处理[4]则是答案。 
  海量的图像都存储在分布式文件系统中,通过分布式的资源进行并行处理[5],同传统的单机环境下相比,能大大提高处理效率。Hadoop是一个非常流行的存储、处理海量数据的平台。将Hadoop与OpenCV结合起来,组成一个集群化的并行图像处理环境,在时间性能上能够获得非常大的提升。 
  3 环境搭建 
  本集群环境由4个节点组成,其中1个主节点、3个从节点。4个节点均要安装OpenCV,Hadoop集成环境。 
  3.1 Linux操作系统 
  Linux操作系统为Ubuntu14.04 LTS。 
  3.2 JDK安装配置 
  JDK为jdk1.8。 
  3.3 OpenCV安装配置 
  1)准备工作。 
  更新环境:sudo apt-get update 
  sudo apt-get upgrade 
  搭建C/C++编译环境:sudo apt-get install build-essential   安装关联库:sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev 
  sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev ant 
  2)下载opencv-3.0.0压缩包。 
  3)解压到指定路径,进入opencv3文件夹。 
  4)新建build文件夹,存放opencv的编译文件。 
  5)配置opencv文件。在build目录下执行以下命令。 
  cmake �CD CMAKE_BUILD_TYPE=Release �CD CMAKE_INSTALL_PREFIX=/usr/local .. 
  6)编译。 
  make 
  7)安装opencv库到系统。 
  sudo make install 
  安装过程中未出现错误,并在/usr/local/share/OpenCV目录下出现java目录则表示opencv安装成功。 
  3.4 Hadoop安装配置 
  1)准备工作 
  设置网卡,修改IP解析文件,安装配置ssh服务。 
  2)下载hadoop2.7.1压缩包。 
  3)解压到指定路径。 
  4)配置Hadoop环境变量。 
  5)创建用于存放命名空间以及数据信息的文件夹。 
  6)在主节点配置Hadoop。 
  7)将主节点配置完成的hadoop传送到各从节点。 
  8)在主节点格式化文件系统。 
  9)启动hadoop集群 
  3.5 eclipse安装配置 
  安装的eclipse为Mars.1版本。 
  3.6 eclipse配置Hadoop开发环境 
  1)下载插件。 
  2)将插件放到eclipse/plugins目录下。 
  3)重启eclipse,打开Windows->Preferences,配置Hadoop安装路径。 
  4)配置Map/Reduce Locations 
  打开Windows->Open Perspective->Other,选择Map/Reduce->OK。出现Map/Reduce Locations选项卡,点击右边小象图标,打开Hadoop Location配置窗口。其中,Location name为用户自定义的名字,Map/Reduce Master中的Host和Port对应是master和9000。DFS Master对应是master和9000。点击完成后,若左侧的Project Explorer出现如图1所示内容,表明配置成功。 
   
  图1 配置成功示例 
  若HDFS中没有内容,则上图中hadoop下的文件夹为空。 
  4 集群化处理与测试 
  4.1 MapReduce与OpenCV的结合 
  OpenCV关注图像处理,MapReduce关注分布式处理,将两者结合便是分布式图像处理。 
  MapReduce的分布式处理分为map和reduce方法。 
  在map方法中,可以对图片进行预处理、灰度、边缘检测、特征值提取等一系列操作。每个map可以是一张图片,在大型的集群上运行时,可以同时处理多张图片,从而提高处理速度。 
  在reduce方法中,可以对map的输出进行处理,例如特征值汇总、比对、识别,从而实现预处理、特征值提取、图像识别的并行处理。 
  4.2 测试程序 
  1)创建程序 
  创建一个Map/Reduce Project,名为Test。 
  2)配置OpenCV路径 
  右键单击项目名称,选择Properties->Java Build Path->Add Library。 
  选择User Library->Next。选择User Libraries->New,创建一个新的库,命名为opencv3.0。点击Add External JARs,选择opencv-300.jar。 
  选择Native library location,点击Edit进行编辑,选择本地库目录:/usr/local/share/OpenCV/java。最后点击OK,配置完成。 
  3)编写Map类 
  创建MyMap.java 
  public void map(Text key, BytesWritable value, Context context){ 
  BufferedImage img = ImageIO.read 
  (new ByteArrayInputStream(value.getBytes())); 
  Mat m = img2Mat(img); 
  imgViewer.show(m,"Loaded image"); 
  context.write(key, value); 
  } 
  MyMap类实现读取已转换为SequenceFile类型的图片文件,调用OpenCV类实现图像显示,其中img2Mat方法实现将BufferedImage类型转换为Mat矩阵。   4)编写Reduce类 
  创建MyReduce.java。 
  public void reduce(Text key,Iterable values,Context context){ 
  for(BytesWritable value : values){ 
  FileOutputStream fos = new 
  FileOutputStream("/home/jcxy/2.jpg"); 
  JPEGImageEncoder je = 
  JPEGCodec.createJPEGEncoder(fos); 
  je.encode(img); 
  context.write(key, value); 
  }}} 
  MyReduce类主要实现将数据流转换成图片保存到本地,并输出。 
  5)编写主函数类 
  创建MyTest.java。 
  static{System.loadLibrary(Core.NATIVE_LIBRARY_NAME);} 
  public static void main(String[] args) { 
  Job job = new Job(conf," "); 
  job.setMapperClass(MyMap.class); 
  job.setReducerClass(MyReduce.class); 
  job.setInputFormatClass(SequenceFileInputFormat.class); 
  FileInputFormat.addInputPath(job,path); 
  FileOutputFormat.setOutputPath(job, new Path("/result")); 
  System.exit(job.waitForCompletion(true)?0:1); 
  }} 
  主函数实现Map、Reduce程序的调用。 
  将Test项目打包成Test.jar(打包时选择Runnable JAR file,否则运行时会找不到路径),保存到主目录下,并在命令行中执行以下命令运行: 
  hadoop jar Test.jar MyTest 
  运行结果如图2所示。 
   
  图2 运行效果图 
  本示例主要实现对二进制图片文件的读取,转换,显示,存储。通过这几个步骤的实现表明,本环境能实现在hadoop平台上使用opencv进行图像的处理。 
  5 结束语 
  为了提高图像处理的速度,算法精度的提高是必不可少的,但集群化处理,对于大量的图片来说也是必需的。本文介绍了集群化图像处理平台环境的搭建,经过编码测试,在此大数据平台上可以实现opencv类的调用进行图像处理。本文为集群化图像处理的实现提供了平台搭建的基础,具有参考价值。 
  参考文献: 
  [1] 张林,吴振强.基于OpenCV的图像特征智能识别系统设计[J].电子设计工程, 2015, 23(20): 189-192. 
  [2] 霍树民.基于Hadoop的海量影像数据管理关键技术研究[D].长沙: 国防科学技术大学, 2010. 
  [3] 英英.基于MATLAB的图形图像处理系统的实现[D].呼和浩特: 内蒙古大学, 2013. 
  [4] 寇福东.基于多核DSP的数字图像处理并行化方法研究[D].北京: 北京理工大学, 2015. 
  [5] 张良将,宦飞,王杨德. Hadoop云平台下的并行化图像处理实现[J]. 通信技术, 2012(10): 59-62.

### 回答1: Hadoop可以用于处理大规模的图片数据,下面是一个简单的Hadoop图片处理项目的流程: 1. 将图片存储到HDFS中,使用HDFS命令上传图片文件到HDFS。 2. 使用MapReduce框架对图片进行处理,可以通过编写MapReduce程序实现对图片的压缩、缩放、裁剪、旋转等操作。 3. 输出处理后的图片到HDFS中,可以使用HDFS命令将输出结果从HDFS中下载到本地。 4. 可以使用Hadoop Streaming将已有的图片处理工具集成到Hadoop中,例如ImageMagick、OpenCV等。 5. 在处理大规模的图片数据时,可以使用Hadoop的分布式计算能力进行并行处理,提高处理效率。 6. 可以使用Hadoop的可视化工具Hue来查看处理结果,并进行可视化展示。 总之,Hadoop可以为图片处理提供一个高效、可靠的解决方案,可以应用于大规模的图片处理场景。 ### 回答2: Hadoop图片处理项目是基于Hadoop分布式计算框架进行的大规模图片处理的项目。由于现代互联网的快速发展,图片数据量迅速增加,传统的串行方式已经无法满足处理需求。Hadoop图片处理项目通过将图片数据分片并在分布式集群中进行并行处理,可以快速有效地处理大量图片数据。 Hadoop图片处理项目的核心思想是将大型的图片处理任务拆分成多个小任务,然后在分布式计算集群中运行。首先,图片数据会被拆分成多个块,并且这些块会被分配到不同的计算机节点中。每个节点都会独立运行自己的任务,对拆分后的图片数据进行处理。处理结果会被汇总,形成最终的处理结果。 在Hadoop图片处理项目中,为了提高计算效率和容错性,通常会采用HDFS(Hadoop分布式文件系统)作为存储框架,将大型的图片数据分布式存储在集群的多个节点上。通过该文件系统,不仅能够实现高效的数据存储,还可以实现数据的高可靠性和容错性。 此外,Hadoop图片处理项目还可以利用Hadoop生态系统中的其他工具来增加功能,如使用Hive进行数据查询和分析,使用Pig来编写数据转换脚本,使用MapReduce来进行数据处理和计算等。 综上所述,Hadoop图片处理项目通过将大规模的图片处理任务分布到多个计算节点上,并利用Hadoop分布式计算框架的优势,实现了高效、快速、可扩展和鲁棒的图片处理功能。它为大数据领域中的图片数据分析和处理提供了强大的支持,并在许多实际应用中得到了广泛应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值