【Java Opencv系列】5.1彩色图像转灰度

来源:互联网 发布:淘宝网官网登录 编辑:程序博客网 时间:2024/06/01 10:10

5.1彩色图像转灰度图

本节内容代码下载链接:http://download.csdn.net/detail/u012343179/9801552

Gray = R*0.299 + G*0.587 + B*0.114

在testOpencv项目下创建imageBasicProcess包,包下新建RgbtoGRayTest.java窗体应用和MyRgbtoGray.java类。


RgbtoGrayTest.java代码如下:

package imageBasicProcess;import java.awt.EventQueue;import javax.swing.JFrame;import javax.swing.JLabel;import org.opencv.core.Core;import org.opencv.core.Mat;import org.opencv.imgcodecs.Imgcodecs;import org.opencv.imgproc.Imgproc;import tool.mat2BufferedImage;import java.awt.BorderLayout;import javax.swing.ImageIcon;import javax.swing.JButton;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;public class RgbtoGrayTest {static{System.loadLibrary(Core.NATIVE_LIBRARY_NAME);}private JFrame frame;Mat mrgb;/** * Launch the application. */public static void main(String[] args) {EventQueue.invokeLater(new Runnable() {public void run() {try {RgbtoGrayTest window = new RgbtoGrayTest();window.frame.setVisible(true);} catch (Exception e) {e.printStackTrace();}}});}/** * Create the application. */public RgbtoGrayTest() {initialize();}/** * Initialize the contents of the frame. */private void initialize() {frame = new JFrame();frame.setBounds(0, 0, 800, 600);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().setLayout(null);JLabel lbl = new JLabel("New label");lbl.setBounds(0, 50, 500, 400);frame.getContentPane().add(lbl);JButton btn = new JButton("\u7070\u5EA6\u5316");btn.addMouseListener(new MouseAdapter() {@Overridepublic void mouseClicked(MouseEvent arg0) {Mat mgray=new Mat(mrgb.rows(),mrgb.cols(),mrgb.type());Imgproc.cvtColor(mrgb, mgray, Imgproc.COLOR_RGB2GRAY);//Opencv中彩色转灰度的函数//mgray=MyRgbtoGray.rgbToGray(mrgb);lbl.setIcon(new ImageIcon(mat2BufferedImage.matToBufferedImage(mgray)));}});btn.setBounds(0, 0, 100, 30);frame.getContentPane().add(btn);//我们的操作mrgb=Imgcodecs.imread("F://lena.jpg",Imgcodecs.CV_LOAD_IMAGE_COLOR);lbl.setIcon(new ImageIcon(mat2BufferedImage.matToBufferedImage(mrgb)));}}

运行结果:

原图:

点击按钮后:(灰度)


本节中最为重要的就是:

Imgproc.cvtColor(mrgb,mgray, Imgproc.COLOR_RGB2GRAY);//Opencv中彩色转灰度的函数

下面我们自己编码实现该效果:

MyRgbtoGray.java的代码如下:

package imageBasicProcess;import org.opencv.core.CvType;import org.opencv.core.Mat;public class MyRgbtoGray {public static Mat rgbToGray(Mat mrgb){Mat mgray=new Mat(mrgb.rows(),mrgb.cols(),CvType.CV_8UC1);//一样大小的灰度图for(int i=0;i<mrgb.rows();i++){for(int j=0;j<mrgb.cols();j++){double[] value=mrgb.get(i, j);//BGR顺序double valueGray=0.114*value[0]+0.587*value[1]+0.299*value[2];//转换公式mgray.put(i, j, valueGray);}}return mgray;}}

效果与opencv中的一致。

CommissarMa          2017年4月1日16:54:26



0 0