a-a-Java-启动图像识别和图像处置-经常使用-href=-全面指南 (aajaas智能锁说明书)
图像识别和图像处置是计算机视觉畛域的关键运行之一。在中成功图像识别和处置可以经常使用各种库和框架来成功,上方将引见一些罕用的方法和工具。
1、Java图像处置库的选用
Java提供了丰盛的图像处置库,其中最盛行的是JavaAdvancedImaging(J)和Java2DAPI。这些库提供了各种图像处感性能和算法,例如图像缩放、旋转、滤波、直方图平衡化等。
2、图像读取和保留
在Java中,图像通常以像素数组的方式存储。你可以经常使用javax.imageio.ImageIO类来读取和保留经常出现的图像格局,如JPEG、PNG等。例如,经常使用以下代码可以加载一个图像文件:
importjavax.imageio.ImageIO;importjava.awt.image.BufferedImage;importjava.io.File;importjava.io.IOException;publicclassImageProcessing{publicstaticvoidmain(String[]args){try{BufferedImageimage=ImageIO.read(newFile("input.jpg"));//启动图像处置操作//...//保留图像ImageIO.write(image,"jpg",newFile("output.jpg"));}catch(IOExceptione){e.printStackTrace();}}}
3、图像处置操作
Java提供了各种图像处置操作。上方是一些经常出现的图像处置技术:
图像缩放:可以经常使用AffransformOp类中的scale()方法来缩放图像。例如,以下代码将图像增加一半:
importjava.awt.Graphics2D;importjava.awt.Image;importjava.awt.geom.AffineTransform;importjava.awt.image.BufferedImage;importjavax.swing.ImageIcon;publicclassImageProcessing{publicstaticvoidmain(String[]args){try{BufferedImageimage=ImageIO.read(newFile("input.jpg"));intscaledWidth=image.getWidth()/2;intscaledHeight=image.getHeight()/2;BufferedImagescaledImage=newBufferedImage(scaledWidth,scaledHeight,image.getType());Graphics2Dg=scaledImage.createGraphics();AffineTransformtransform=AffineTransform.getScaleInstance(0.5,0.5);g.drawImage(image,transform,null);g.dispose();//保留缩放后的图像ImageIO.write(scaledImage,"jpg",newFile("output.jpg"));}catch(IOExceptione){e.printStackTrace();}}}
图像滤波:可以经常使用Java2DAPI提供的滤波器类来成功图像含糊、锐化、边缘检测等滤波成果。例如,以下代码成功了高斯含糊滤波:
importjava.awt.image.BufferedImage;importjava.awt.image.ConvolveOp;importjava.awt.image.Kernel;importjavax.swing.ImageIcon;publicclassImageProcessing{publicstaticvoidmain(String[]args){try{BufferedImageimage=ImageIO.read(newFile("input.jpg"));float[]matrix={0.1f,0.1f,0.1f,0.1f,0.2f,0.1f,0.1f,0.1f,0.1f};Kernelkernel=newKernel(3,3,matrix);ConvolveOpconvolveOp=newConvolveOp(kernel);BufferedImagefilteredImage=convolveOp.filter(image,null);//保留滤波后的图像ImageIO.write(filteredImage,"jpg",newFile("output.jpg"));}catch(IOExceptione){e.printStackTrace();}}}
图像直方图平衡化:直方图平衡化是一种用于增强图像对比度的技术。可以经常使用javax.imageio.ImageIO类和java.awt.image.BufferedImage类来成功直方图平衡化。例如,以下代码将启动直方图平衡化:
importjava.awt.image.BufferedImage;importjavax.imageio.ImageIO;publicclassImageProcessing{publicstaticvoidmain(String[]args){try{BufferedImageimage=ImageIO.read(newFile("input.jpg"));//计算图像的直方图int[]hist=newint[256];for(inty=0;y<image.getHeight();y++){for(intx=0;x<image.getWidth();x++){intrgb=image.getRGB(x,y);intgray=(rgb>>16)&0xFF;//提取灰度值hist[gray]++;}}//计算累积直方图int[]cumHist=newint[256];cumHist[0]=hist[0];for(inti=1;i<256;i++){cumHist[i]=cumHist[i-1]+hist[i];}//全局直方图平衡化for(inty=0;y<image.getHeight();y++){for(intx=0;x<image.getWidth();x++){intrgb=image.getRGB(x,y);intgray=(rgb>>16)&0xFF;//提取灰度值intnewGray=(int)(cumHist[gray]*255.0/(image.getWidth()*image.getHeight()));intnewRgb=(newGray<<16)|(newGray<<8)|newGray;image.setRGB(x,y,newRgb);}}//保留处置后的图像ImageIO.write(image,"jpg",newFile("output.jpg"));}catch(IOExceptione){e.printStackTrace();}}}
4、图像识别
图像识别是指依据图像的内容来识别图像中的物体、文字、场景等。在Java中成功图像识别须要经常使用专门的机器学习和深度学习库,如OpenCV和DL4J(DeepLearning4j)等。
经常使用OpenCV启动图像识别:OpenCV是一种宽泛经常使用的计算机视觉库,提供了各种图像处置和机器学习算法。可以经常使用OpenCV的Java绑定库来成功图像识别。以下是一个经常使用OpenCV启动人脸识别的示例:
importorg.opencv.core.Mat;importorg.opencv.core.MatOfRect;importorg.opencv.core.Rect;importorg.opencv.core.Scalar;importorg.opencv.core.Size;importorg.opencv.imgcodecs.Imgcodecs;importorg.opencv.objdetect.CascadeClassifier;publicclassImageRecognition{publicstaticvoidmain(String[]args){System.loadLibrary(Core.NATIVE_LIBRARY_NAME);//加载人脸检测器CascadeClassifierfaceDetector=newCascadeClassifier("haarcascade_frontalface_default.xml");//读取图像Matimage=Imgcodecs.imread("input.jpg");MatgrayImage=newMat();Imgproc.cvtColor(image,grayImage,Imgproc.COLOR_BGR2GRAY);//检测人脸MatOfRectfaceDetections=newMatOfRect();faceDetector.detectMultiScale(grayImage,faceDetections);//在图像上绘制人脸框for(Rectrect:faceDetections.toArray()){Imgproc.rectangle(image,newPoint(rect.x,rect.y),newPoint(rect.x+rect.width,rect.y+rect.height),newScalar(0,255,0),3);}//保留检测结果Imgcodecs.imwrite("output.jpg",image);}}
经常使用DL4J启动图像识别:DL4J是一个支持散布式和并行处置的深度学习Java库。可以经常使用DL4J的预训练模型来启动图像识别。以下是一个经常使用DL4J启动图像分类的示例:
importorg.deeplearning4j.nn.graph.ComputationGraph;importorg.deeplearning4j.util.ModelSerializer;importorg.nd4j.linalg.api.ndarray.INDArray;importorg.nd4j.linalg.factory.Nd4j;publicclassImageRecognition{publicstaticvoidmain(String[]args){try{//加载预训练模型ComputationGraphmodel=ModelSerializer.restoreComputationGraph("model.zip");//读取图像BufferedImageimage=ImageIO.read(newFile("input.jpg"));INDArrayarray=Nd4j.create(ImageLoader.toMnist(image)).reshape(1,1,28,28);//图像分类INDArrayoutput=model.outputSingle(array);intpredictedLabel=output.argMax(1).getInt(0);System.out.println("PredictedLabel:"+predictedLabel);}catch(IOExceptione){e.printStackTrace();}}}
以上引见了在Java中成功图像识别和图像处置的基本方法。你可以依据详细需求选用适宜的库和算法来成功更复杂的图像处置和识别义务。
用java编写一个图像处理,光线补偿 、
写了很多篇关于图像处理的文章,没有一篇介绍Java 2D的图像处理API,文章讨论和提及的
API都是基于JDK6的,首先来看Java中如何组织一个图像对象BufferedImage的,如图:
一个BufferedImage的像素数据储存在Raster中,ColorModel里面储存颜色空间,类型等
信息,当前Java只支持一下三种图像格式- JPG,PNG,GIF,如何向让Java支持其它格式,首
先要 完成Java中的图像读写接口,然后打成jar,加上启动参数- Xbootclasspath/p
即可。
Java中如何读写一个图像文件,使用ImageIO对象即可。读图像文件的代码如下:
File file = new File(D:\\test\\blue_);BufferedImage image = (file);
写图像文件的代码如下:
File outputfile = new File();(bufferedImage, png,outputfile);
从BufferedImage对象中读取像素数据的代码如下:
1 int type= ();2 if ( type ==_INT_ARGB || type == _INT_RGB )3 return (int [])()(x, y, width, height, pixels );4 else5 return ( x, y, width, height, pixels, 0, width );
首先获取图像类型,如果不是32位的INT型数据,直接读写RGB值即可,否则需要从Raster
对象中读取。
往BufferedImage对象中写入像素数据同样遵守上面的规则。代码如下:
1 int type= ();2 if ( type ==_INT_ARGB || type == _INT_RGB )()(x, y, width, height, pixels );4 (x, y, width, height, pixels, 0, width );
读取图像可能因为图像文件比较大,需要一定时间的等待才可以,Java Advance Image
Processor API提供了MediaTracker对象来跟踪图像的加载,同步其它操作,使用方法如下:
MediaTracker tracker = new MediaTracker(this); //初始化对象 om/roucheng/(image_01, 1); // 加入要跟踪的BufferedImage对象image_(1, ) // 等待10秒,让iamge_01图像加载
从一个32位int型数据cARGB中读取图像RGB颜色值的代码如下:
1 int alpha = (cARGB >> 24)& 0xff; //透明度通道 g/2 int red = (cARGB >> 16) &0xff;3 int green = (cARGB >> 8) &0xff;4 int blue = cARGB & 0xff;
将RGB颜色值写入成一个INT型数据cRGB的代码如下:
cRGB = (alpha << 24) | (red<< 16) | (green << 8) | blue;
创建一个BufferedImage对象的代码如下:
BufferedImage image = newBufferedImage(256, 256, _INT_ARGB);
一个完整的源代码Demo如下:
1 package ; 2 3 import ; 4 import ; 5 import ; 6 import 2D; 7 import ; 8 import ; 9 import ; 10 import ; 11 12 import ; 13 import ; 14 import ; 15 16 public class PlasmaDemo extends JComponent {1718 /** 19 *20 */21 private static final long serialVersionUID = -L;22 private BufferedImage image = null;23 private int size = 256; 2425 public PlasmaDemo() {26 super();27 (false);28}2930 protected void paintComponent(Graphics g) {31 Graphics2D g2 = (Graphics2D)g;(_ANTIALIASING, _ANTIALIAS_ON);33 (getImage(), 5, 5, (), (), null);34}3536 private BufferedImage getImage() {37 if(image == null) {38 image = new BufferedImage(size, size, _INT_ARGB);39 int[] rgbData = new int[size*size];40generateNoiseImage(rgbData);41 setRGB(image, 0, 0, size, size, rgbData); 42 File outFile = new File(); 43 try { 44 (image, jpg, outFile); 45 } catch (IOException e) { (); 47} 48}49 return image;50}5152 public void generateNoiseImage(int[] rgbData) {53 int index = 0;54 int a = 255;55 int r = 0;56 int g = 0;57 int b = 0;5859 for(int row=0; row<size; row++) {60 for(int col=0; col<size; col++) {61 // set random color value for each pixel62 r = (int)(128.0 + (128.0 * ((row + col) / 8.0)));63 g = (int)(128.0 + (128.0 * ((row + col) / 8.0)));64 b = (int)(128.0 + (128.0 * ((row + col) / 8.0)));6566 rgbData[index] = ((clamp(a) & 0xff) << 24) |67 ((clamp(r) & 0xff) << 16) |68 ((clamp(g) & 0xff) << 8)|69 ((clamp(b) & 0xff));70 index++;71}72}7374}7576 private int clamp(int rgb) {77 if(rgb > 255)78 return 255;79 if(rgb < 0)80 return 0;81 return rgb;82}8384 public void setRGB( BufferedImage image, int x, int y, int width, int height, int[] pixels ) {85 int type = ();86 if ( type == _INT_ARGB || type == _INT_RGB )()( x, y, width, height, pixels );88 else89 ( x, y, width, height, pixels, 0, width );90}9192 public static void main(String[] args) {93 JFrame frame = new JFrame(Noise Art Panel);(_ON_CLOSE);95 ()(new BorderLayout()); m/roucheng/ 98 ()(new PlasmaDemo(), );99 (new Dimension(400 + 25,450)); (); 101 (true); 102} 103 }
html中〈a+href=””〉,链接地址可以是绝对地址也可以是?
在HTML中,<a>标签的href属性指定的链接地址可以是:1. 绝对地址:以<LINK::START http:://或https:://开头的完整URL地址。 例如:开头的完整URL地址。 例如<LINK:END>:>html<a href=绝对地址链接</a>2. 相对地址:相对于当前页面的URL地址。 例如:html<a href=>联系页面链接</a>这会链接到当前页面所在目录下的页面。 3. 片段标识符:链接到同一页面的某个片段。 例如:html<a href=#section1>链接到section1片段</a>这会在页面内跳转到id=section1的元素位置。 4. 空链接: href为空或者没有href属性,浏览器会加载当前页面。 例如:html<a href=>空链接</a> <a>无href属性链接</a>5. 页面内锚点:链接到页面内的某个位置。 例如:html<a href=#top>回到页首</a>这会链接到id=top的元素位置。 6. 邮箱地址:以mailto:开头的邮件地址链接。 例如:html <a href=>发送邮件</a> 这会打开邮件编辑界面发送邮件到指定邮箱地址。 所以,在HTML的<a>标签中,href属性支持的链接地址类型包括:绝对地址、相对地址、片段标识符、空链接、页面内锚点、邮箱地址等。 这使得页面内部跳转和外部链接 become 非常方便。
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。