详解OpenCV Java环境搭建与功能演示

  

  

OpenCV做为功能强大的计算机视觉开源框架,包含了500多个算法实现,而且还在不断增加,其最新版本已经更新到3.2。其SDK支持Android与Java平台开发,对于常见的图像处理需求几乎都可以满足,理应成为广大Java与Android程序员的首先的图像处理框架. Java中使用OpenCV的配置及其简单,可以毫不客气的说几乎是零配置都可以。

  

  

配置引入OpenCV相关jar包,首先要下载OpenCV的自解压版本,下载地址:http://opencv.org/opencv - 3 - 2. - html
  

  

然后拉到网页的最下方,下载Windows自解压开发包
  

  

详解OpenCV Java环境搭建与功能演示

  

下载好了双击解压缩之后找到构建路径,显示如下:
  

  

详解OpenCV Java环境搭建与功能演示

  

双击打开Java文件夹,
  

  

详解OpenCV Java环境搭建与功能演示

  

里面有一个jar直接导入到Eclipse中的新建项目中去,然后把x64里面的dll文件拷贝到Eclipse中使用的Java JDK本和jre/bin目录下面即可。环境就配置好啦,简单吧!配置好的最终项目结构:
  

  

详解OpenCV Java环境搭建与功能演示

  

  

读入一张图像,一句话搞定

        垫src=https://www.yisu.com/zixun/Imgcodecs.imread (imageFilePath);   如果(src.empty())返回;      

将垫对象转换为BufferedImage对象

        公共BufferedImage conver2Image(垫垫){   int宽度=mat.cols ();   int高度=mat.rows ();   int=mat.channels dim ();   int[]像素=new int(宽*高);   byte [] rgbdata=https://www.yisu.com/zixun/new字节(宽*高* dim);   mat.get (0, 0, rgbdata);   BufferedImage图像=new BufferedImage(宽度、高度,   BufferedImage.TYPE_INT_ARGB);   int指数=0;   int r=0, g=0, b=0;   for (int行=0;行<高度;行+ +){   for (int坳=0;坳<宽度;坳+ +){   如果(dim==3) {   指数=行*宽* dim +坳*变暗;   b=rgbdata &0xff(指数);   g=rgbdata[指数+ 1]&0xff;   r=rgbdata[索引+ 2]&0xff;   像素(行*宽度+坳)=((255 &0xff) <24) |   ((r&0xff) <16) | ((g&0xff) <8) | b&0xff;   }   如果(dim==1) {   指数=行*宽度+坳;   b=rgbdata &0xff(指数);   像素(行*宽度+坳)=((255 &0xff) <24) |   ((b&0xff) <16) | ((b&0xff) <8) | b&0xff;   }   }   }   setRGB(图片,0,0,宽度,高度,像素);   返回图像;   }      

将BufferedImage对象转换为垫对象

        公共垫convert2Mat (BufferedImage图像){   int宽度=image.getWidth ();   int高度=image.getHeight ();   垫src=https://www.yisu.com/zixun/new垫(新尺寸(宽度、高度),CvType.CV_8UC3);   int[]像素=new int(宽*高);   byte [] rgbdata=new字节(宽*高* 3);   getRGB(图片,0,0,宽度,高度,像素);   int指数=0,c=0;   int r=0, g=0, b=0;   for (int行=0;行<高度;行+ +){   for (int坳=0;坳<宽度;坳+ +){   指数=行*宽度+坳;   c=像素(指数);   r=(c&0xff0000)> 16;   g=(c&0xff00)> 8;   b=c&0xff;      指数=行*宽* 3 +坳* 3;   rgbdata(指数)=(字节)b;   rgbdata(指数+ 1)=(字节)g;   rgbdata[指数+ 2]=r(字节);   }   }      src。把(0,0,rgbdata);   返回src;   }      

特别要说明一下,BufferedImage与垫的RGB通道顺序是不一样,正好相反,在垫对象中三通道的顺序为BGR而在BufferedImage中为RGB。

  

从垫中读取全部像素(其中图像为垫类型数据)

        int宽度=image.cols ();   int高度=image.rows ();   int=image.channels dim ();   byte [] data=https://www.yisu.com/zixun/new字节(宽*高* dim);   的形象。(0,0,数据);      

遍历像素操作与保存改变

        int指数=0;   int r=0, g=0, b=0;   for (int行=0;row<高度;行+ +){   for (int坳=0;col<宽度*变暗;坳+=dim) {   指数=行*宽* + dim坳;   b=数据(指数)和0 xff;   g=数据(指数+ 1),0 xff;   r=数据(指数+ 2),0 xff;=255 - r;   g=255 - g;   b=255 - b;      数据(指数)=(字节)b;   数据(指数+ 1)=(字节)g;   数据(索引+ 2]=(字节)r;   }   }   的形象。把(0,0,数据),

详解OpenCV Java环境搭建与功能演示