java BufferedImage rgb2hsv
来源:互联网 发布:怎么看链接是淘宝客 编辑:程序博客网 时间:2024/05/01 16:20
做了个java版的rgb2hsv
/* * RGB转HSV * 输入范围R,G,B, 0~255 * 输出范围[0]:0~1,[1]:0~1,[2]:0~255 */public static float[] rgb2hsvF(int R, int G, int B){ int tMax, tMin;float H=0,S=0,V=0;float delta;float tRet[] = new float[3];tMax=Math.max(R, Math.max(G,B));tMin=Math.min(R, Math.min(G,B));if(0 == tMax){tRet[0] = 0; tRet[1] = 0;tRet[2] = 0; return tRet;}V = tMax; delta = tMax - tMin; S = delta / tMax; if(0 == delta){H = 0;}else if(G == tMax ){H = 2 + (B - R) / delta; // between cyan & yellow}else if(B == tMax){H = 4 + (R - G) / delta; // between magenta & cyan}else if(R == tMax){H = (G - B) / delta; // between yellow & magenta} H *= 60; if(H < 0 ){H += 360;}tRet[0] = H/360.0f; tRet[1] = S;tRet[2] = V; return tRet;}/* * RGB转HSV图像 * 注意:HSV的范围都是0~255,H的范围不是0~360,否则显示的就不正常 */public static BufferedImage rgb2hsv(final BufferedImage vSrcImg){if(null == vSrcImg){return null; }int tWidth = vSrcImg.getWidth();int tHeight = vSrcImg.getHeight(); BufferedImage tHsvImg = new BufferedImage(tWidth, tHeight, vSrcImg.getType());//System.out.println("rgb2hsv, vSrcImg.getType()="+vSrcImg.getType());int R,B,G,max, min;float H=0,S=0,V=0;int delta;for(int i=0; i<tWidth; i++){for(int j=0; j<tHeight; j++){int pixel = vSrcImg.getRGB(i, j);R = (pixel & 0xff0000) >> 16; G = (pixel & 0xff00) >> 8; B = (pixel & 0xff);float f[] = rgb2hsvF(R, G, B);R = (int)(f[0]*255);G = (int)(f[1]*255);B = (int)(f[2]);int pixel_hsv2= (R << 16) | (G << 8) | B;tHsvImg.setRGB(i, j, pixel_hsv2);if(true){continue;}//用下面这段显示的就有问题,不知道哪里错了//max=Math.max(R, Math.max(G,B));//min=Math.min(R, Math.min(G,B));//if(0 == max){//tHsvImg.setRGB(i, j, 0);//continue; //}////V = max; //delta = max - min; //S = (delta / max); // s// //if(0 == delta){//H = 0;//}else if(G == max ){//H = 2 + (B - R) / delta; // between cyan & yellow//}else if(B == max){//H = 4 + (R - G) / delta; // between magenta & cyan//}else if(R == max){//H = (G - B) / delta; // between yellow & magenta//}// //H *= 60; //if(H < 0){//H += 360;//}////R = (int)(H*255/360);//G = (int)(S*255);//B = (int)(V); //int pixel_hsv= (R << 16) | (G << 8) | B;//tHsvImg.setRGB(i, j, pixel_hsv);}} return tHsvImg;}
把lena拿来试一下,跟matlab里面一样
阅读全文
0 0
- java BufferedImage rgb2hsv
- RGB2HSV
- java 剪切 图片 BufferedImage
- Java之BufferedImage简谈
- java TookitImage转BufferedImage
- Java之BufferedImage简谈
- Java之BufferedImage简谈
- Java之BufferedImage简谈
- BufferedImage
- BufferedImage
- Java-ImageObserver,BufferedImage,Graphics2D,Graphics
- JAVA中BufferedImage的用法
- opencv4android--RGB2HSV
- Java上传图片、剪裁图片、 imgareaselect +BufferedImage + BufferedImage
- Java里将Image转换成BufferedImage
- java BufferedImage 合成多张图片
- Java加载图片 利用Image与BufferedImage
- Java加载图片 Image与BufferedImage 区别
- 第一篇
- Java学习路线图
- MySQL数据库表名、列名、别名区分大小写的问题
- 史上最全的DZNEmptyDataSet(空白页框架)说明书
- CMake入门实践
- java BufferedImage rgb2hsv
- [日推荐]『明星在哪儿』这可能是你离爱豆最近的一次!
- Git相关概念介绍
- RecyclerView实现双列表联动
- Android 6.0和7.0权限问题及部分手机的坑
- JAVA8新特性(三)——方法引用
- python web工程(django)
- react的生命周期函数
- POJ2396 Budget 上下界网络流