Java OpenCV開發——使用JavaCV在視窗顯示影象,並監聽滑鼠點選事件
阿新 • • 發佈:2019-02-04
在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());
}
});
}
執行結果如下:
滑鼠點選圖片後,可以看到控制檯輸出了點選的座標。