图像的像素处理1(R,G,B变换)

原创 2004年06月27日 21:22:00

1,学会了使用PixelGrabber类;

2,由于粗心在一个for循环后面多加了一个“;”,导致很久没找到程序错误。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Image.*;
import java.io.*;
import java.awt.image.*;
import java.awt.*;


public class graphicsTest extends JFrame {
  JPanel contentPane;
  BorderLayout borderLayout1 = new BorderLayout();
  MenuBar menuBar1 = new MenuBar();
  Menu menu1 = new Menu();
  MenuItem menuItem1 = new MenuItem();
  Menu menu2 = new Menu();
  MenuItem menuItem2 = new MenuItem();
  JLabel lb=new JLabel();
  JPanel pl=new JPanel();
  MenuItem menuItem3 = new MenuItem();
  String strSource=null;
  String dir=null;
  MenuItem menuItem4 = new MenuItem();
  public graphicsTest() {
    enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }

 
  private void jbInit() throws Exception  {
    contentPane = (JPanel) this.getContentPane();
    contentPane.setLayout(borderLayout1);
    this.setSize(new Dimension(400, 300));
    this.setTitle("Frame Title");
    menu1.setLabel("File");
    menuItem1.setLabel("open");
    menuItem1.addActionListener(new Frame1_menuItem1_actionAdapter(this));
    menu2.setLabel("Edit");
    menuItem2.setLabel("split");
    menuItem2.addActionListener(new Frame1_menuItem2_actionAdapter(this));
    menuItem3.setLabel("change");
    menuItem3.addActionListener(new Frame1_menuItem3_actionAdapter(this));
    menuItem4.setLabel("pixels");
    menuItem4.addActionListener(new Frame1_menuItem4_actionAdapter(this));
    menuBar1.add(menu1);
    menuBar1.add(menu2);
    menu1.add(menuItem1);
    menu2.add(menuItem2);
    menu2.add(menuItem3);
    menu2.add(menuItem4);
    setMenuBar(menuBar1);
    contentPane.add(pl,BorderLayout.CENTER);
    pl.add(lb);
  }

   protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
      System.exit(0);
    }
  }


  void menuItem1_actionPerformed(ActionEvent e) {


   FileDialog fd=new FileDialog(this,"Open");
    fd.show();
    if(fd.getFile()!=null){
      strSource = fd.getFile();
      dir=fd.getDirectory();
    }
    ImageIcon source=new ImageIcon(dir+strSource);
 lb.setIcon(source);
 lb.repaint();
  }


 
  void menuItem4_actionPerformed(ActionEvent e) {
    ImageIcon source=new ImageIcon(dir+strSource);
    int height=source.getIconHeight();
    int width=source.getIconWidth();
    Image im=source.getImage();
    int height1=im.getHeight(null);
    int width1=im.getWidth(null);
    //int i;
    int[] content=new int[width*height];
    PixelGrabber pg=null;
    try{
      pg = new PixelGrabber(im, 0, 0, width, height, content, 0,
                            width);
      if(pg.grabPixels()!=true)
        try{
          throw new java.awt.AWTException("pg error"+pg.status());
        }catch(Exception eq){eq.printStackTrace();}
    } catch(Exception ex){ex.printStackTrace();
      System.out.print("xxxx");}
    try{
      System.out.print(content.length);
      System.out.print(height*width);
      System.out.print(height1*width1);
      System.out.print(Integer.toHexString(content[479999]));
      //System.out.println (i);
     // for (int i=0; i <480000; i++);
     for(int i=0;i<height*width;i++)
      {
        //System.out.print(i);
        int red=(int)(((content[i]>>16)&0xff)*0.3);
        int green = (int)(((content[i] >> 8) & 0xff)*0.4);
        int blue = (int)(((content[i]) & 0xff)*0.11);
        blue = blue + 20;
        if (blue > 255)
          blue = 255;
        /*System.out.println ("i="+i);
        System.out.println ("content["+i+"]"+Integer.toHexString(content[i]));
        System.out.println ("green"+Integer.toHexString(green));
        System.out.println ("blue"+Integer.toHexString(blue));*/
        content[i] = (255<< 24) |(red << 16)| (green << 8)|blue;
      }
      Image pic=createImage(new MemoryImageSource(width,height,content,0,width));
      ImageIcon ic=new ImageIcon(pic);
      lb.setIcon(ic);
      Icon icon=lb.getIcon();
      lb.imageUpdate(pic,0,0,0,width,height);
      if(icon!=null)
      {
         ((ImageIcon)icon).getImage().flush();
      }
      lb.repaint();
    }catch(Exception ee)
    {ee.printStackTrace();}
  }

  public static void main(String args[])
  {
   new graphicsTest().show();
  }
 
}

class Frame1_menuItem1_actionAdapter implements java.awt.event.ActionListener {
  graphicsTest adaptee;

  Frame1_menuItem1_actionAdapter(graphicsTest adaptee) {
    this.adaptee = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.menuItem1_actionPerformed(e);
  }
}
class Frame1_menuItem4_actionAdapter implements java.awt.event.ActionListener {
  graphicsTest adaptee;

  Frame1_menuItem4_actionAdapter(graphicsTest adaptee) {
    this.adaptee = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.menuItem4_actionPerformed(e);
  }
}

基于vs2010+opencv2.4.8实现----将三通道RGB图片分别按R,G,B三个不同分量输出显示

(一)RGB模型:             RGB模型是工业界的一种颜色标准,是通过对红(Red),绿(Green),蓝(Blue)3个颜色亮度的变化以及她们相互之间的叠加来得到各种各样的颜色的。该...
  • qq_32211827
  • qq_32211827
  • 2017年03月17日 17:48
  • 2118

OpenCV多通道图像转单通道R,G,B图像

从多通道图像提取单通道R,G,和B分量图像
  • x_r_su
  • x_r_su
  • 2016年09月27日 12:36
  • 840

OpenCV中提取R,G,B通道,并显示出来。

今天突然想到要提取图像的RGB通道出来显示看看,然后就看看书怎么玩。 实际上提取单独的通道是使用到cvSplit函数,只是如果想把通道图像给显示出来,就有那么点需要注意的地方咯。 直接上代码: #in...
  • aa512690069
  • aa512690069
  • 2013年07月07日 00:52
  • 2727

RGB1-----分离RGB24像素数据中的R、G、B分量和生成RGB24格式的彩条测试图

转自http://blog.csdn.net/leixiaohua1020/article/details/50534150 1、分离RGB24像素数据中的R、G、B分量 本程序中的函数可以将RG...
  • qingkongyeyue
  • qingkongyeyue
  • 2016年10月13日 18:07
  • 1625

matlab实现将彩色图像(R,G,B)色分量的直方图匹配,并计算其相关性

函数 function hist = calcrgb2hist(picname) pic1 = imread(picname); pic1R = pic1(:,:,1); pic1G = pic1(...
  • Eagleest
  • Eagleest
  • 2014年06月26日 15:25
  • 9520

R G B 表示方法

RGB
  • tony2278
  • tony2278
  • 2016年12月12日 17:13
  • 282

openCV—彩色图像R、G、B分量的提取与合并及其相关颜色空间的转化

一、函数简介 1、split—提取R、B、G分量(返回值顺序为:B、G、R) 函数原型:split(m, mv=None) m:彩图矩阵 mv:默认参数 2、merge—合并R、...
  • haluoluo211
  • haluoluo211
  • 2016年10月14日 11:44
  • 820

OpenCV提取显示一张图片的R,G,B颜色分量

使用OpenCV分别提取一张图片的R、G、B分量然后显示出来: #include "opencv/cv.h" #include "opencv/highgui.h" int main(int arg...
  • Bobsweetie
  • Bobsweetie
  • 2016年07月05日 13:35
  • 2908

笔记:OpenCV 读取摄像头并显示图像的R、G、B三个通道的直方图

要点: 1、读取摄像头 2、从一副彩色图像中分离出R、G、B三个通道(cvSplit) 3.  分别对每个通道图像创建直方图,并显示 源码如下: // Camera_Capture_...
  • JarvisChu
  • JarvisChu
  • 2013年01月14日 14:07
  • 6409

学习opencv第四章第三题

#include "cv.h" #include "highgui.h" #pragma comment(lib,"cv.lib") #pragma comment(lib,"highgui.lib...
  • LJH0600301217
  • LJH0600301217
  • 2013年03月10日 08:53
  • 1012
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:图像的像素处理1(R,G,B变换)
举报原因:
原因补充:

(最多只允许输入30个字)