1. 程式人生 > >Java OpenCV開發——使用JavaCV在視窗顯示影象,並監聽滑鼠點選事件

Java OpenCV開發——使用JavaCV在視窗顯示影象,並監聽滑鼠點選事件

  在Eclipse下使用OpenCV開發過程中,需要在彈出視窗中顯示影象,並能監聽滑鼠點選事件。但網上一般都是用JLabel顯示圖片,再新增到JFrame上;但JLabel不對輸入事件作出反應,無法實現需求。
  
  為此我查遍資料,發現在JavaCV中,實現了CanvasFrame這個類,它繼承了JFrame,內部是用Canvas來顯示圖片。而Canvas可以實現監聽輸入事件,所以通過CanvasFrame獲取Canvas可以監聽滑鼠點選事件。
  
  程式碼實現如下(先得配置好JavaCV環境):

    public static void main(String[] args) {

        Mat mat = opencv_imgcodecs.imread("img/Lena.jpg"
); // 新建canvasFrame視窗,命名 CanvasFrame canvasFrame = new CanvasFrame("測試點選"); // 關閉視窗則退出程式 canvasFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Mat轉換成能在視窗顯示的格式 ToMat converter = new OpenCVFrameConverter.ToMat(); canvasFrame.showImage(converter.convert(mat)); // 獲取canvas
Canvas canvas = canvasFrame.getCanvas(); // 對canvas設定滑鼠監聽事件 canvas.addMouseListener(new MouseListener() { @Override public void mouseReleased(MouseEvent e) { } @Override public void mousePressed(MouseEvent e) { } @Override
public void mouseExited(MouseEvent e) { } @Override public void mouseEntered(MouseEvent e) { } @Override public void mouseClicked(MouseEvent e) { // 控制檯輸出點選的座標 System.out.println("x: " + e.getX()); System.out.println("y: " + e.getY()); } }); }

  執行結果如下:
  執行結果
  
  滑鼠點選圖片後,可以看到控制檯輸出了點選的座標。