본문 바로가기

java

도서 바코드 인식기 프로그램 제작 (3) 앞선 포스팅에서 도서 바코드의 바이너리 데이터를 우리가 알아볼 수 있는 데이터인 ISBN으로 변환하는 알고리즘을 Java를 이용해서 구현해보았다. 그래서 이번에는 사진으로 찍은 바코드를 인식해서 바이너리 데이터로 변환하는 알고리즘을 짜보도록 하겠다.영상처리를 하는데 가장 자주 쓰이는 오픈 소스인 OpenCV를 이용해서 짜볼까 하다가 아직 이것을 다루는 방법을 잘 몰라서 일단은 Python으로 대충 구현을 하였다. 핵심 알고리즘의 부분은 다음과 같다. 도서 바코드를 보았을 때, 기준이 되는 선이 총 6개가 존재한다. 이 기준선은 다른 선에 비해서 아래쪽으로 좀 더 삐져 나와있는 것을 확인할 수 있다. 그래서 이것을 이용해서 기준선의 두께를 기준으로 빈 공간은 0을 표현하고 검은 색은 1을 표현한다고 했으므..
도서 바코드 데이터 추출 알고리즘 이 소스코드는 도서에서만 적용이 되는 것입니다. 물론 다른 바코드의 경우에도 EAN-13을 만족한다면 몇 가지 상수 값만 변환하면 바로 사용이 가능합니다. 여기에서는 따로 구현을 하지 않았습니다. 만약 다른 바코드로 사용을 하신다면 11번 줄과 31번 줄에 있는 데이터 값을 해당하는 값에 맞게 변환을 해주셔야 합니다. 사용방법은 Barcode개체를 생성할 때 인자로 바코드의 바이너리 데이터를 주기만 하면 되며, getData 메서드를 호출하면 그 바이너리 데이터를 변환해서 우리가 알아볼 수 있는 데이터로 확인이 가능합니다. 최적화를 신경쓰지 않고 만든 소스 코드라 약간 난잡해보일 수 있습니다. 역시 변수명을 정하는 것이 가장 어려운 문제인 것 같네요...... class Barcode { private ..
도서 바코드 인식기 프로그램 제작 (2) 앞서서 도서 바코드가 어떤 식으로 인코딩이 되어 있는지를 살펴보았다. 이번에는 앞선 내용을 통해서 도서 바코드를 디코딩해서 우리가 원하는 정보를 가져오는 방법에 대해서 살펴보도록 하겠다. 도서 바코드의 경우에는 첫 시작이 9이기 때문에 따로 이 숫자를 인식을 해줄 필요는 없었다. 만약 도서의 첫 시작 번호를 몰랐다면 숫자를 인식할 필요가 있는데, 그 이유는 도서 바코드에 사용하는 EAN-13이 맨 앞자리에 따라서 인코딩 방법이 달라지기 때문이다. (아무리 생각을 해보더라도 왜 앞자리에 따라서 인코딩 방법을 다르게 했는지 이해가 가지 않는다.... 그냥 바코드에 줄을 더 추가해서 맨 앞자리를 표현을 해주면 될텐데 말이다.) 처음에는 C++로 구현을 하려고 했으나, 그냥 구현하는 것이 약간 귀찮아서 그냥 J..
[프로그래밍, 자료구조] 큐(Queue) 큐는 FIFO(First In First Out) 형태의 자료구조로 먼저 들어간 데이터가 먼저 빠져나가는 것이다. 실생활에서 이와 비슷한 내용은 버스 줄서기로 먼저 줄을 선 사람이 먼저 버스를 탄다.이를 구현하는 방법은 여러가지 방법이 있는데, 여기서는 데이터 구조를 원형처럼 생각해서 구현하는 방법을 이용하였다. 디버그의 편의성을 위해서 총 4개의 파일로 분할해서 만들었다. 첫 번째는 배열의 크기가 0이면 에러를 발생시키게 하는 파일 소스이다. public class EQException extends Exception{ public EQException(){ super("The queue is empty!"); } } 두 번째는 interface로 Queue에 필요한 메서드를 선언하는 파일 소스이다. ..
2048 ver 1.1 보호되어 있는 글입니다.
2048 ver 1.0 보호되어 있는 글입니다.
2048 ver 1.1 앞의 버전의 2048 ver1.0은 말했듯이 기능이 매우 제한적이였다. 그래서 이번에는 조금 기능을 추가해 보았다.기능을 추가해봤더니 코드가 570줄...ㄷㄷ...이렇게 많이 나올줄 알았으면 처음부터 분리해서 코드를 짤걸 이라는 후회가 든다... 시간이 나면 다시 싹 뜯어 고쳐야겠다. 움직임을 입력받을 때 숫자가 아닌 w, a, s, d로 입력받게 하였다.reset, save, load 기능 추가점수 표시 및 undo 기능 추가 (단, undo는 10번만 가능하다.) undo는 10번만 가능하지만 save를 하면 전체 값이 저장되어서 용량의 낭비가 생기므로 그 이후의 값들은 삭제하는 방안을 이용해야겠다.code가 너무 지저분하다...(아무리 생각을 해보더라도..) 코드를 나눠서 쓰던지 아니면 간결한 표현..
Fibonacci number 자바를 이용해 피보나치 수열을 구현했다.1번 부분은 n번째 피보나치 수 구하기2번 부분은 integer 범위에서 피보나치 수를 몇 번째까지 구할 수 있는지를3번 부분은 long 범위에서 피보나치 수를 몇 번째까지 구할 수 있는지를 구하는 코드이다.음... 1번 부분에서 구한 것을 2, 3번에서 다시 구하려고 하니까 똑같은 작업을 반복하는군..그냥 배열을 이용해서 다시 써봐야겠다. import java.util.Scanner; public class Fibonacci { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int n; int maxFibInt = 0; long maxFibLong = 0; //1. S..