Java OpenCV开发——使用JavaCV在窗口显示图像,并监听鼠标点击事件
程序员文章站
2022-07-12 15:18:39
...
在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());
}
});
}
运行结果如下:
鼠标点击图片后,可以看到控制台输出了点击的坐标。
上一篇: Awk学习笔记