OpenCV-图像处理- Java(读取与显示图片)
2019-01-22 19:10
3371 查看
版权声明:本文由 Micheal 超 博客 创作,转载请附带链接,有问题欢迎交流。 https://blog.csdn.net/qq_42887760/article/details/86599810
- 在C++显示图片,OpenCV为其提供了一个叫做HighGUI的接口,尚且没有在java中实现。
- OpenCV支持有限的图片格式,具体可参阅官方文档(常用的支持bmp、jpeg、png、tiff),可以使用Imgcodecs类的imread方法来读取图片(注意测试时,路径不要包括中文):
结构目录(Eclipse中):
创建两个类:OpenCVTest 和 ImageViewer
步骤
- 创建类 OpenCVTest
import org.opencv.core.*; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; public class OpenCVTest { public static void main(String[] args) { // 载入dll(必须先加载) System.loadLibrary(Core.NATIVE_LIBRARY_NAME); //将文件读入为OpenCV的Mat格式。注意测试时,路径不要包括中文 Mat src = Imgcodecs.imread("E:/Pictures/test.jpg"); if(src.dataAddr()==0){ System.out.println("打开文件出错"); } ImageViewer imageViewer = new ImageViewer(src, "第一幅图片"); imageViewer.imshow(); } }
- 创建类 ImageViewer
import org.opencv.core.Mat; import javax.swing.*; import java.awt.*; import java.awt.image.BufferedImage; import java.awt.image.DataBufferByte; public class ImageViewer { private JLabel imageView; private Mat image; private String windowName; /** * 如果使用junit测试时调用该方法,图像会一闪而过,可通过sleep()等方式暂时显示 * @param */ public ImageViewer(Mat image) { this.image = image; } /** * @param image 要显示的mat * @param windowName 窗口标题 */ public ImageViewer(Mat image, String windowName) { this.image = image; this.windowName = windowName; } /** * 图片显示 */ public void imshow() { setSystemLookAndFeel(); Image loadedImage = toBufferedImage(image); JFrame frame = createJFrame(windowName, image.width(), image.height()); imageView.setIcon(new ImageIcon(loadedImage)); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 用户点击窗口关闭 } private void setSystemLookAndFeel() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (UnsupportedLookAndFeelException e) { e.printStackTrace(); } } private JFrame createJFrame(String windowName, int width, int height) { JFrame frame = new JFrame(windowName); imageView = new JLabel(); final JScrollPane imageScrollPane = new JScrollPane(imageView); imageScrollPane.setPreferredSize(new Dimension(width, height)); frame.add(imageScrollPane, BorderLayout.CENTER); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); return frame; } private Image toBufferedImage(Mat matrix) { int type = BufferedImage.TYPE_BYTE_GRAY; if (matrix.channels() > 1) { type = BufferedImage.TYPE_3BYTE_BGR; } int bufferSize = matrix.channels() * matrix.cols() * matrix.rows(); byte[] buffer = new byte[bufferSize]; matrix.get(0, 0, buffer); // 获取所有的像素点 BufferedImage image = new BufferedImage(matrix.cols(), matrix.rows(), type); final byte[] targetPixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData(); System.arraycopy(buffer, 0, targetPixels, 0, buffer.length); return image; } }
参考博客
相关文章推荐
- 【Java+OpenCV】图像的基本处理(读取,显示)
- Opencv (Opencv2)结合MFC学习数字图像处理---显示图片
- javacpp-opencv图像处理之2:实时视频添加图片水印,实现不同大小图片叠加,图像透明度控制,文字和图片双水印
- javacpp-opencv图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作
- Opencv读取文件夹连续图片,RGB分量显示,图像灰度化
- Opencv (Opencv2)结合MFC学习数字图像处理【3】---显示图片
- (转)Opencv (Opencv2)结合MFC学习数字图像处理【3】---显示图片
- 使用OpenCV 读取图片 ,再用OpenGL显示,图像有错位
- javacpp-opencv图像处理之2:实时视频添加图片水印,实现不同大小图片叠加,图像透明度控制,文字和图片双水印
- OpenCV入门_学习笔记_读取、显示、处理图像
- javacpp-opencv图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作
- opencv图像处理2--打开图片并显示
- OPENCV图像处理基础(一)读取一张图片
- opencv图像处理2--打开图片并显示
- 基于Qt与OpenCV的图片读取、保存,并利用Canny进行简单的边缘处理结果显示
- Java开发Opencv之(二)读取与显示图片
- 在标准window窗口下,显示opencv处理过的图片
- opencv中读取显示图像
- JAVA读取Oracle中的blob图片字段并显示
- java读取mysql中保存的图片并显示在jsp上