opencv Java构建中imshow的等效方法
Posted
技术标签:
【中文标题】opencv Java构建中imshow的等效方法【英文标题】:Equivalent method for imshow in opencv Java build 【发布时间】:2013-05-05 21:14:39 【问题描述】:对不起,如果我问了一个愚蠢的问题,我正在尝试使用 Java 构建来学习 openCV。在 opencv 示例中,我发现 c++ 中有 imshow 方法或 python 中有 showImage 方法,但我在 opencv Java API 中搜索,我找不到 imshow 方法。
opencv与Java build中imshow()和waitKey()的equal方法是什么?
【问题讨论】:
【参考方案1】:public static void showResult(Mat img)
Imgproc.resize(img, img, new Size(640, 480));
MatOfByte matOfByte = new MatOfByte();
Highgui.imencode(".jpg", img, matOfByte);
byte[] byteArray = matOfByte.toArray();
BufferedImage bufImage = null;
try
InputStream in = new ByteArrayInputStream(byteArray);
bufImage = ImageIO.read(in);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
frame.getContentPane().add(new JLabel(new ImageIcon(bufImage)));
frame.pack();
frame.setVisible(true);
catch (Exception e)
e.printStackTrace();
【讨论】:
Java 3.0 中没有更多的HighGUI
模块,不再使用Imgcodecs
insead【参考方案2】:
目前还没有 Java highgui 包装器 (link)。您应该使用 swing 或 swt 来显示图像。见:Opencv java - Load image to GUI
【讨论】:
非常感谢解答,waitKey方法呢?和thread.sleep一样吗? 我明白了,呃,还有一件事,您知道如何启动网络摄像头并从中获取实时信息。我的意思是,到目前为止,我设法通过网络摄像头捕捉我的脸并检测它,现在我想做的是打开我的网络摄像头并检测我的脸而不捕捉它,就像这样youtube.com/watch?v=HTk_UwAYzVk【参考方案3】:这是在 Java OpenCV 中等效于 Imshow() 的现成解决方案 它使用简单。 API 将如下所示:
Imshow im = new Imshow("Title");
im.showImage(matimage);
访问这里 https://github.com/master-atul/ImShow-Java-OpenCV
【讨论】:
【参考方案4】:我用 swing 和 awt 做了一些东西。
首先,通过 imencode
和 ImageIo.read
从 Mat img 获取 BufferedImage
MatOfByte mMatOfByte = new MatOfByte()
imencode(".png", img, mMatOfByte);
byte[] byteArray = mMatOfByte.toArray();
InputStream in = new ByteArrayInputStream(byteArray);
BufferedImage srcImage = ImageIO.read(in);
其次,将其更改为目标尺寸宽度和高度(w,h)并使用渲染提示在扩大或缩小情况下获得干净的图像。
bufImage = new BufferedImage(w, h, srcImage.getType());
Graphics2D g = bufImage.createGraphics();
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(srcImage, 0,0, w, h, 0, 0, srcImage.getWidth(), srcImage.getHeight(), null);
我在 JPanel 的 paintComponent()
方法中使用了目标 bufImage
。
对于waitKey()
,我使用了KeyEventDispatcher
。
【讨论】:
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review 感谢 Tom Aranda 的评论。我重写了我的内容。 这是一个显着的改进。 :)【参考方案5】:你必须使用 java swings 或 awt 来显示图像..看看运行代码http://projectimageprocessing.blogspot.in/2013/05/introduction.html
【讨论】:
以上是关于opencv Java构建中imshow的等效方法的主要内容,如果未能解决你的问题,请参考以下文章
在opencv中使用imshow显示字节数组的最快方法是啥?