OpenCV做为功能强大的计算机视觉开源框架,包含了500多个算法实现,而且还在不断增加,其最新版本已经更新到3.2。其SDK支持Android与Java平台开发,对于常见的图像处理需求几乎都可以满足,理应成为广大Java与Android程序员的首先的图像处理框架. Java中使用OpenCV的配置及其简单,可以毫不客气的说几乎是零配置都可以。
配置引入OpenCV相关jar包,首先要下载OpenCV的自解压版本,下载地址:http://opencv.org/opencv - 3 - 2. - html
然后拉到网页的最下方,下载Windows自解压开发包
下载好了双击解压缩之后找到构建路径,显示如下:
双击打开Java文件夹,
里面有一个jar直接导入到Eclipse中的新建项目中去,然后把x64里面的dll文件拷贝到Eclipse中使用的Java JDK本和jre/bin目录下面即可。环境就配置好啦,简单吧!配置好的最终项目结构:
读入一张图像,一句话搞定
垫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环境搭建与功能演示