[Java] OpenCV Tutorial
Goal
- OpenCV 를 통한 비디오 재생 구현
들어가며
Practice
1. OpenCV 라이브러리 생성
- Ant 설치
$ brew install ant
Ant 설치를 위해서는 /usr/local/bin에 권한이 있어야함
sudo chown -R [USER_NAME] /usr/local/include /usr/local/lib /usr/local/lib/pkgconfig
- Java OpenCV 설치를 위해서 brew formula 수정
- -DBUILD_opencv_java=OFF -> -DBUILD_opencv_java=ON
$ brew edit opencv [edit]
-
OpenCV 빌드
$ brew install --build-from-source opencv
- 에러 발생
- brew link 중 디렉터리 권한이 없어 에러 발생
- 권한 부여 후 제거/재설치
- 라이브러리 파일 (dll, jar) 생성 확인
2. Java 프로젝트에 라이브러리 적용
- 라이브러리 프로젝트 내 라이브러리 디렉터리에 복사
- 프로젝트 우클릭 > Build Path > Configure Build Path…
- OpenCV jar 추가
- Add JARs… > opencv jar
- Native library location > Edit
- Workspace > [프로젝트명] > lib
- 동영상 재생 코드 작성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | package io.dorbae.opencv.tutorial; import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.MatOfByte; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.videoio.VideoCapture; /* ************************************************* * * VideoPlayer.java * ************************************************* * * @version 1.0.0 2019-01-23 17:37 Initialize * @author dorbae * @since 1.0.0 * */ public class VideoPlayer { public VideoPlayer() {} /* * * * @param args * * @version 1.0.0 2019-01-23 17:38 Initialize * @author dorbae * @since 1.0.0 * */ public static void main( String[] args) { // Native 라이브러리 로드 System.loadLibrary(Core.NATIVE_LIBRARY_NAME); // 로드할 영상 VideoCapture camera = new VideoCapture("/Users/dorbae/Downloads/wedding.avi"); // Video 출력 화면 프레임 JFrame jframe = new JFrame("OpenCV Tutorial by dorbae"); jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel vidpanel = new JLabel(); jframe.setContentPane(vidpanel); jframe.setVisible(true); jframe.doLayout(); jframe.setBounds(0, 0, 640, 480); Mat frame = new Mat(); // Frame try { while ( true) { if ( camera.read( frame)) { // 이미지 로드 ImageIcon image = new ImageIcon(Mat2BufferedImage(frame)); vidpanel.setIcon(image); vidpanel.repaint(); } } } catch( Exception e) { e.printStackTrace(); } } /* * * * @param matrix * @return * @throws Exception * * @version 1.0.0 2019-01-25 11:33 Initialize * @autho dorbae * @since 1.0.0 * */ private static BufferedImage Mat2BufferedImage(Mat matrix)throws Exception { MatOfByte mob=new MatOfByte(); Imgcodecs.imencode(".jpg", matrix, mob); byte ba[]=mob.toArray(); BufferedImage bi=ImageIO.read(new ByteArrayInputStream(ba)); return bi; } } |
에러 (opencv 4.0.1 jar는 java 11 버전에서 빌드)) -> runtime java 버전 변경
- 실행결과
댓글남기기