close
選擇Application Window
Application Name: AdjContrastDemo
Layout: Absolute layout
新增兩組JSlider元件
新增兩個static變數 alpha、beta
完整原始碼
1: package Basic;
2: 3: import java.awt.EventQueue;
4: import java.awt.image.BufferedImage;
5: 6: import javax.swing.ImageIcon;
7: import javax.swing.JFrame;
8: import javax.swing.JOptionPane;
9: import javax.swing.JSlider;
10: import javax.swing.JLabel;
11: import javax.swing.event.ChangeListener;
12: import javax.swing.event.ChangeEvent;
13: 14: import org.opencv.core.Core;
15: import org.opencv.core.Mat;
16: import org.opencv.imgcodecs.Imgcodecs;
17: import org.opencv.imgproc.Imgproc;
18: 19: public class AdjContrastDemo {
20: static{System.loadLibrary(Core.NATIVE_LIBRARY_NAME);}
21: private JFrame frmContrastAdjustment;
22: static double alpha = 1;
23: static double beta = 50;
24: JSlider slider; 25: JSlider slider_1; 26: JLabel lblAlphaVal; 27: JLabel lblBetaVal; 28: JLabel lblImage;29: static Mat imgSrc;
30: static Mat imgG = new Mat();
31: static Mat imgDst = new Mat();
32: /**
33: * Launch the application.
34: */
35: public static void main(String[] args) {
36: EventQueue.invokeLater(new Runnable() {
37: public void run() {
38: try {
39: //imgSrc = Imgcodecs.imread("C:\\OpenCV\\images\\left01.jpg");
40: imgSrc = Imgcodecs.imread("C:\\OpenCV\\images\\lena.jpg");
41: if(imgSrc.empty())
42: {43: JOptionPane.showMessageDialog(null, "無法讀取圖片","警告",
44: JOptionPane.WARNING_MESSAGE); 45: }46: if(imgSrc.channels()==3)
47: imgSrc.copyTo(imgG);48: //Imgproc.cvtColor(imgSrc, imgG, Imgproc.COLOR_BGR2GRAY);
49: else
50: imgSrc.copyTo(imgG);51: //imgDst = new Mat();
52: AdjContrastDemo window = new AdjContrastDemo();
53: window.frmContrastAdjustment.setVisible(true);54: } catch (Exception e) {
55: e.printStackTrace(); 56: } 57: } 58: }); 59: } 60: 61: /**
62: * Create the application.
63: */
64: public AdjContrastDemo() {
65: initialize(); 66: } 67: 68: /**
69: * Initialize the contents of the frame.
70: */
71: private void initialize() {
72: frmContrastAdjustment = new JFrame();
73: frmContrastAdjustment.setTitle("Contrast Adjustment");
74: frmContrastAdjustment.setBounds(100, 100, 725, 692); 75: frmContrastAdjustment.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 76: frmContrastAdjustment.getContentPane().setLayout(null); 77: 78: slider = new JSlider();
79: slider.setValue((int)alpha);
80: slider.addChangeListener(new ChangeListener() {
81: public void stateChanged(ChangeEvent arg0) {
82: lblAlphaVal.setText(slider.getValue()+"");
83: alpha = slider.getValue(); 84: AdjustContrast(); 85: } 86: }); 87: 88: slider.setBounds(125, 40, 370, 19); 89: frmContrastAdjustment.getContentPane().add(slider); 90: 91: slider_1 = new JSlider();
92: slider_1.setValue((int)beta);
93: slider_1.addChangeListener(new ChangeListener() {
94: public void stateChanged(ChangeEvent arg0) {
95: lblBetaVal.setText(slider_1.getValue()+"");
96: beta = slider_1.getValue(); 97: AdjustContrast(); 98: } 99: }); 100: slider_1.setBounds(125, 90, 370, 19); 101: frmContrastAdjustment.getContentPane().add(slider_1); 102: 103: JLabel lblAlpha = new JLabel();
104: lblAlpha.setText("alpha");
105: lblAlpha.setBounds(55, 29, 71, 36); 106: frmContrastAdjustment.getContentPane().add(lblAlpha); 107: 108: JLabel lblBeta = new JLabel();
109: lblBeta.setText("beta");
110: lblBeta.setBounds(55, 80, 71, 36); 111: frmContrastAdjustment.getContentPane().add(lblBeta); 112: 113: lblAlphaVal = new JLabel("0");
114: lblAlphaVal.setBounds(499, 29, 55, 36);115: lblAlphaVal.setText(""+alpha);
116: frmContrastAdjustment.getContentPane().add(lblAlphaVal); 117: 118: lblBetaVal = new JLabel("0");
119: lblBetaVal.setBounds(499, 80, 55, 36);120: lblBetaVal.setText(""+beta);
121: frmContrastAdjustment.getContentPane().add(lblBetaVal); 122: 123: lblImage = new JLabel("");
124: lblImage.setBounds(31, 154, 587, 467); 125: frmContrastAdjustment.getContentPane().add(lblImage); 126: }127: public void AdjustContrast()
128: { 129: imgG.convertTo(imgDst, -1, alpha, beta); 130: BufferedImage bufImg = matToBufferedImage(imgDst);131: lblImage.setIcon(new ImageIcon(bufImg));
132: }133: public BufferedImage matToBufferedImage(Mat matrix){
134: int cols = matrix.cols();
135: int rows = matrix.rows();
136: int elemSize = (int)matrix.elemSize();
137: byte[] data = new byte[cols*rows*elemSize];
138: if(matrix.channels()==3)
139: Imgproc.cvtColor(matrix, matrix, Imgproc.COLOR_BGR2RGB); 140: matrix.get(0, 0, data); 141: BufferedImage bufImg = null;142: switch(matrix.channels())
143: {144: case 1:
145: bufImg = new BufferedImage(cols, rows, BufferedImage.TYPE_BYTE_GRAY);
146: break;
147: case 3:
148: bufImg = new BufferedImage(cols,rows, BufferedImage.TYPE_3BYTE_BGR);
149: break;
150: } 151: bufImg.getRaster().setDataElements(0, 0, cols, rows, data);152: return bufImg;
153: } 154: }Mat to BufferedImage
1: public BufferedImage matToBufferedImage(Mat matrix){
2: int cols = matrix.cols();
3: int rows = matrix.rows();
4: int elemSize = (int)matrix.elemSize();
5: byte[] data = new byte[cols*rows*elemSize];
6: if(matrix.channels()==3)
7: Imgproc.cvtColor(matrix, matrix, Imgproc.COLOR_BGR2RGB); 8: matrix.get(0, 0, data); 9: BufferedImage bufImg = null;10: switch(matrix.channels())
11: {12: case 1:
13: bufImg = new BufferedImage(cols, rows, BufferedImage.TYPE_BYTE_GRAY);
14: break;
15: case 3:
16: bufImg = new BufferedImage(cols,rows, BufferedImage.TYPE_3BYTE_BGR);
17: break;
18: } 19: bufImg.getRaster().setDataElements(0, 0, cols, rows, data);20: return bufImg;
21: }對比調整
1: public void AdjustContrast()
2: { 3: imgG.convertTo(imgDst, -1, alpha, beta); 4: BufferedImage bufImg = matToBufferedImage(imgDst);5: lblImage.setIcon(new ImageIcon(bufImg));
6: }測試灰階影像
測試彩色影像
參考資料:
1. 王者歸來 OpenCV3 使用Java開發手冊 - 呂傑利 著

全站熱搜











留言列表
