问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求颜色直方图的java代码,C语言写的也可以,多谢多谢 可以发到我的邮箱:sadwxqezc@163.com

发布网友 发布时间:2022-05-18 03:01

我来回答

2个回答

热心网友 时间:2023-10-08 15:14

使用“java ColorHistogram 图片路径”命令运行就能看到对该图片的RGB颜色分析

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;
import javax.swing.ButtonGroup;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

public class ColorHistogram {
int R[]=new int[256];
int G[]=new int[256];
int B[]=new int[256];
int RGB[]=new int[256];
int max=0;
boolean finished=false;
public ColorHistogram(File f){
for(int i=0;i<256;i++){
R[i]=0;
G[i]=0;
B[i]=0;
RGB[i]=0;
}
if(f==null) return;
try {
BufferedImage bufIm=ImageIO.read(f);
int w=bufIm.getWidth();
int h=bufIm.getHeight();
if(w<=0||h<=0) return;
for(int i=0;i<h;i++)
for(int j=0;j<w;j++){
int rgb=bufIm.getRGB(j, i);
int r=(rgb>>16)&0xff;
int g=(rgb>>8)&0xff;
int b=(rgb)&0xff;
R[r]++;
G[g]++;
B[b]++;
}

for(int i=0;i<256;i++){
RGB[i]=(R[i]+G[i]+B[i])/3;
max=max<R[i]?R[i]:max;
max=max<G[i]?G[i]:max;
max=max<B[i]?B[i]:max;
}
finished=true;
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("max="+max);
}

public void paintHistogram(Graphics g,int w,int h,int flag,boolean smoothly,int mx,int my,JLabel detail){
if(!finished) return;
int src[]=null;
if(flag==1){
g.setColor(Color.RED);
src=R;
}else if(flag==2){
g.setColor(Color.GREEN);
src=G;
}else if(flag==3){
g.setColor(Color.BLUE);
src=B;
}else if(flag==4){
g.setColor(Color.WHITE);
src=RGB;
}
int lineH=0;
int x=0;
int lastX=0;
int lastH=0;
int tmpH=0;
boolean painMouseLine=false;
if(mouseX<0||!detail.isEnabled()) painMouseLine=true;
int mouseI=-1;
int mouseH=-1;
for(int i=0;i<src.length;i++){
lineH=src[i]*h/max;
x=(i*w)>>8;
if(smoothly)
for(int j=0;j<x-lastX;j++){
tmpH=lastH+(lineH-lastH)*j/(x-lastX);
g.drawLine(lastX+j,h-tmpH,lastX+j,h);
}
if(!painMouseLine&&x>mouseX){
Color c=g.getColor();
g.setColor(Color.yellow);
g.drawLine(x,0,x,h-lineH);
mouseH=lineH;
mouseI=i;
g.setColor(c);
painMouseLine=true;
}
g.drawLine(x,h-lineH,x,h);
lastX=x;
lastH=lineH;
}
g.setColor(Color.yellow);
g.drawLine(0,h-mouseH-1,w,h-mouseH-1);
if(detail.isEnabled()&&mouseI>0){
detail.setText(""+mouseI+","+(src[mouseI]*100/max)+"%");
}

}

static ColorHistogram colorHistogram=null;
static JPanel histogram=null;
static int rgbFlag=1;
static JCheckBox multilayerBox=null;
static JCheckBox smoothlyBox=null;
static JCheckBox valueBox=null;
static JLabel valueL=null;
static int mouseX=-1;
static int mouseY=-1;
static boolean lastIsMultilayer=false;
public static void main(String args[]){
JFrame jf=new JFrame();
jf.setBounds(200,100, 600, 300);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel jp=new JPanel();
JRadioButton Rb=new JRadioButton("R",true);
JRadioButton Gb=new JRadioButton("G");
JRadioButton Bb=new JRadioButton("B");
JRadioButton RGBb=new JRadioButton("RGB");
ButtonGroup group=new ButtonGroup();
group.add(Rb);
group.add(Gb);
group.add(Bb);
group.add(RGBb);
multilayerBox=new JCheckBox("叠放");
jp.add(multilayerBox);
jp.add(Rb);
jp.add(Gb);
jp.add(Bb);
jp.add(RGBb);
smoothlyBox=new JCheckBox("平滑");
jp.add(smoothlyBox);
valueBox=new JCheckBox("详细:",true);
valueL=new JLabel("null,null");
jp.add(valueBox);
jp.add(valueL);
jf.add(jp,"South");
if(args.length>0)
colorHistogram=new ColorHistogram(new File(args[0]));
else
colorHistogram=new ColorHistogram(null);
histogram=new JPanel(){
public void paint(Graphics g){
if(!multilayerBox.isSelected()||!lastIsMultilayer){
super.paint(g);
lastIsMultilayer=multilayerBox.isSelected();
}
colorHistogram.paintHistogram(g,getWidth(),getHeight(),rgbFlag,smoothlyBox.isSelected(),mouseX,mouseY,valueL);
}
};
histogram.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(MouseEvent e) {
if(valueBox.isSelected()){
mouseX=e.getX();
mouseY=e.getY();
}
histogram.repaint();
}
});
histogram.setBackground(Color.BLACK);
jf.add(histogram);

Rb.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
rgbFlag=1;
histogram.repaint();
}});
Gb.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
rgbFlag=2;
histogram.repaint();
}});
Bb.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
rgbFlag=3;
histogram.repaint();
}});
RGBb.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
rgbFlag=4;
histogram.repaint();
}});
smoothlyBox.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(!smoothlyBox.isSelected()){
multilayerBox.setSelected(false);
}
histogram.repaint();
}});
multilayerBox.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
if(multilayerBox.isSelected()){
valueBox.setSelected(false);
valueL.setEnabled(false);
}
valueBox.setEnabled(!multilayerBox.isSelected());
histogram.repaint();
}});
valueBox.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
valueL.setEnabled(valueBox.isSelected());
histogram.repaint();
}});
jf.setVisible(true);
jf.addWindowListener(new WindowAdapter() {
public void windowActivated(WindowEvent arg0) {
multilayerBox.setSelected(false);
histogram.repaint();
}
});
jf.addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent arg0) {
multilayerBox.setSelected(false);
}
});
}
}

热心网友 时间:2023-10-08 15:15

开源项目CxImage中有现成的功能和代码。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
焦作有哪些旅行景点值得一去? 河南穿古装去的地方 AE入门从学会套模板开始,AE模板套用简易教程,看起来复杂的AE其实也很... ae怎么套用模板ae模版的使用方法 北京通州区有什么好玩的地方吗 请问现在有哪些看电影的网站?越多越好~~ 帮初中女儿请假一天讲身体不适,班主任却跟别的老师讲她得了大病,该如何... 梦见家中被盗空只剩一件绿色衣的预兆 梦见美丽沙穗 美版4s内置卡贴有什么危害? 用java怎样画直方图 java 怎么从数据库中读出数据并用直方图显示 用java语言怎样编写一个直方图!直方图中按输入的数值,和数值间的比例来显示支付那个图的长短 Java直方图 支付宝上的蚂蚁借呗借钱有限额么 蚂蚁借呗额度我能借多少 Adobe Dreamweaver CS3 要这样才能掌握它的代码呀?请求高人指教?谢谢 adobe dreamweaver CS4 怎么在图片上写文字 Adobe Dreamweaver代码常用的单词 淘宝黄钻或v5等级那个高 Adobe Dreamweaver使用方法 adobe dreamweaver怎么排列图片 基础(10)如何在Adobe Dreamweaver CS3中快速插入iframe框架 Adobe Dreamweaver CS4 如何使用,要简单的,适合第一次使用的人。 苹果11来电话时屏幕周围灯闪烁怎么设置的? 小明家里有一箱过期的牛奶如果直接扔掉就太可惜了曾经魏小明想想办法如何更好地利用这过香过期的牛奶? 请问12读作多少应该怎样写? oppo在哪里能找到客服 oppo客服是多少 &quot;网址&quot;的含义? 名词解释! opporeon3元气版后盖和后摄像头镜片是相连的吗? 直方图怎么让总占比包含其他分项 OPPO Reno3 Pro 5G换后盖多少钱! oppo a11x手机支持快充吗亲,刚买的这款手机,卖手机的说支持快充? 微信公众号里的情感句子怎么转到qq空间 怎样将苹果手机微信公众号里的东西分享到qq空间?我在右上角菜单里找不到qq空间这一选项,我也装空间 请问这个系列的表情包的作者是谁? 这个表情包的是谁? 谁知道这个表情包里面的人是谁 请问有谁知道这个表情包的出处嘛 市场上的老花镜又笨又重的,不喜欢啊。问一下大神们,现在有超轻超薄的老花镜么? 红利圈做的供应链金融和P2P有什么区别吗? P2P供应链金融的模式有哪些 ipad air2能配蓝牙键盘吗? 道口贷是否合法 你认为理论上,一个拿着刀的成年人能打过狮子吗? 纯钛老花镜好吗? 请问ipad air2怎么连接蓝牙键盘? 如果一个人类和一只狮子搏斗时能同归于尽吗 老人老花镜应该怎么选