Java 9에서는 Process API가 크게 개선되었습니다. 이제 실행 중인 프로세스의 PID(프로세스 ID)를 손쉽게 조회할 수 있고, 특정 프로세스의 자식(children) 또는 후손(descendants) 프로세스를 확인할 수 있습니다. 또한 시스템에서 실행 중인 모든 프로세스 목록을 가져오거나, 임의의 프로세스에 대한 상세 정보를 얻고, 프로세스 트리(process tree)를 탐색하는 데 유용한 새로운 클래스가 추가되었습니다. 이러한 메서드들이 반환하는 정보는 운영체제(OS)에서 실행 중인 프로세스들의 스냅샷(snapsh
Java 9에서는 Process API가 크게 개선되어 운영체제(OS) 프로세스를 손쉽게 관리하고 제어할 수 있게 되었습니다. Java 9 이전에는 자바 프로그램만으로 운영체제 프로세스를 관리하거나 제어하는 것이 매우 까다로웠지만, Java 9부터는 새로운 클래스와 인터페이스가 추가되면서 이러한 작업이 훨씬 간편해졌습니다.대표적으로 ProcessHandle과 ProcessHandle.Info라는 새로운 인터페이스가 도입되었으며, 기존 Process 클래스에도 다양한 새로운 메서드들이 추가되었습니다.프로세스 트리 탐색 개요아래 예제에
Java 9에서 도입된 모듈 시스템(JPMS)에는 이름 없는 모듈(Unnamed Module)이라는 특별한 개념이 있습니다. 이름 없는 모듈은 이름 없는 패키지(unnamed package)와 밀접한 관련이 있는데, 어떤 명명된 모듈(named module)에도 속하지 않고 클래스패스(classpath)에 있는 JAR 파일에 존재하는 패키지나 클래스들이 여기에 해당합니다.만약 코드가 이러한 파일들로부터 타입(type)을 로드하려고 하면, 모듈 시스템은 자동으로 클래스패스를 탐색하여 해당 타입을 로드합니다. 즉, 기존 방식대로 작성된
OpenCV 라이브러리를 활용하면 이미지 필터링, 기하학적 변환, 색상 공간 변환, 히스토그램 분석 등 다양한 이미지 처리 작업을 손쉽게 수행할 수 있습니다. 이번 글에서는 그중에서도 이미지를 파일로 저장(작성)하는 방법을 Java 예제와 함께 자세히 알아보겠습니다.이미지 작성(저장)이란?OpenCV에서 Imgcodecs 클래스의 imread() 메서드를 사용해 이미지를 읽어오면, 그 결과는 Mat(Matrix) 객체에 저장됩니다. 이렇게 메모리에 로드된 이미지 데이터는 imwrite() 메서드를 통해 원하는 경로에 파일로 저장할
Java 환경에서 OpenCV를 사용하면 단 한 줄의 코드로 컬러 이미지를 그레이스케일로 변환하며 읽어 들일 수 있습니다. 핵심은 Imgcodecs 클래스의 imread() 메서드와 적절한 읽기 모드 플래그를 조합하는 것입니다. 이 글에서는 사용 가능한 플래그의 종류와 실제 예제 코드를 통해 그 방법을 자세히 살펴보겠습니다. imread() 메서드의 기본 동작 Imgcodecs 클래스의 imread() 메서드는 이미지 파일 경로를 나타내는 문자열 값을 매개변수로 받습니다. 이 메서드는 지정된 파일의 내용을 Mat(매트릭스) 객체에
OpenCV에서 컬러 이미지를 회색조(그레이스케일)로 변환하는 작업은 생각보다 간단합니다. 핵심은 Imgproc 클래스가 제공하는 cvtColor() 메서드입니다. 이 메서드는 이미지의 색상 공간을 다른 형태로 변환해 주는 역할을 하며, 다음과 같은 세 가지 매개변수를 받습니다.src − 원본 이미지를 나타내는 Matrix(Mat) 객체입니다.dst − 변환 결과가 저장될 대상 이미지를 나타내는 Matrix(Mat) 객체입니다.code − 변환할 색상 공간의 종류를 나타내는 정수 값입니다.컬러 이미지
OpenCV에서 이미지의 색상 공간을 변환하려면 Imgproc 클래스가 제공하는 cvtColor() 메서드를 사용하면 됩니다. 이 메서드는 이미지를 한 색상 모델에서 다른 색상 모델로 간단하게 바꿔 주며, 다음과 같은 세 가지 매개변수를 받습니다.src – 변환할 원본 이미지를 담고 있는 Mat(행렬) 객체입니다.dst – 변환 결과를 저장할 대상 Mat 객체입니다.code – 어떤 색상 공간으로 변환할지 지정하는 정수 값(색상 변환 코드)입니다.주요 색상 변환 코드세 번째 매개변수에 전달하는 코드에 따라 변환 결과가 달라집니다.
MongoDB에서 컬렉션 목록 확인하기MongoDB 셸에서는 show collections 명령어를 사용하면 데이터베이스에 존재하는 모든 컬렉션의 목록을 간단하게 출력할 수 있습니다.예제다음과 같이 MongoDB 데이터베이스에 3개의 컬렉션이 생성되어 있다고 가정해 보겠습니다.> use sampleDatabase switched to db sampleDatabase > db.createCollection(students) { ok : 1 } > db.createCollection(teachers) { ok : 1 }
Java OpenCV에서는 org.opencv.core.Core 클래스가 제공하는 bitwise_or() 메서드를 사용하여 두 이미지 간의 비트 OR(Bitwise OR) 연산을 손쉽게 수행할 수 있습니다.이 메서드는 소스(source), 결과 저장용(destination) 행렬 등 세 개의 Mat 객체를 매개변수로 받습니다. 실행 시 소스 행렬들의 각 픽셀 요소에 대해 비트 논리합(disjunction)을 계산하고, 그 결과를 지정된 대상 행렬에 저장합니다.동작 원리비트 OR 연산은 두 이미지의 동일한 위치에 있는 픽셀 값들을 이
이미지 픽셀과 ARGB 값의 이해픽셀(pixel)은 디지털 이미지를 구성하는 가장 작은 단위 요소입니다. 각 픽셀에는 알파(alpha), 빨강(red), 초록(green), 파랑(blue) 네 가지 값이 포함되어 있으며, 이 값들은 32비트 메모리 공간에 ARGB 순서대로 각 8비트씩 저장됩니다.따라서 이미지의 색상을 수정하려면 다음과 같은 과정을 거쳐야 합니다.반복문을 통해 이미지의 모든 픽셀을 하나씩 순회합니다.getRGB() 메서드를 사용하여 픽셀 값을 가져옵니다.가져온 픽셀 값에서 ARGB 값을 추출합니다.RGB 값에 필요한
JShell 소개Java 9는 REPL(Read-Evaluate-Print-Loop)이라 불리는 새로운 도구인 JShell을 도입했습니다. JShell은 완전한 프로그램을 작성하지 않고도 Java 코드를 즉시 실행하고 결과를 확인할 수 있는 명령줄(command-line) 프롬프트 도구입니다.JShell에 코드나 내부 명령어를 입력하면 해당 내용은 현재 세션 동안에만 유지됩니다. JShell을 종료한 후 다시 실행하면 이전에 입력했던 모든 코드가 사라집니다. 이러한 문제를 해결하기 위해 입력한 코드 전체를 파일로 저장할 수 있는 내
모듈(Module)은 재사용을 목적으로 설계된 패키지들의 컨테이너입니다. 각 모듈에는 모듈 디스크립터(module descriptor)가 포함되어 있으며, 여기에는 모듈 이름, 모듈 의존성(해당 모듈이 의존하는 다른 모듈의 이름), 그리고 이 모듈에 의존하는 모듈만 사용할 수 있도록 내보내는(export) 패키지의 이름과 같은 정보가 담겨 있습니다.모듈의 주요 장점1. 강력한 캡슐화(Strong Encapsulation)강력한 캡슐화는 모듈 시스템이 제공하는 가장 큰 장점 중 하나입니다. 기존 자바에서는 public 접근 제어자가
이미지를 네거티브로 변환하는 알고리즘 이미지를 네거티브(색상 반전) 효과로 바꾸는 원리는 매우 간단합니다. 각 픽셀이 가진 빨강(Red), 초록(Green), 파랑(Blue) 값을 255에서 빼주면 됩니다. 전체 과정은 다음과 같습니다. 이미지 내 각 픽셀의 R(빨강), G(초록), B(파랑) 값을 가져옵니다. 각 색상 값을 255에서 뺀 결과를 새로운 색상 값으로 저장합니다. 변경된 색상 값들을 조합하여 새로운 픽셀 값을 만듭니다. 새로 만든 값을 해당 픽셀에 설정합니다. Java에서의 구현 Java에서는 ImageIO와 C
사진 필름에서 보던 것처럼 색상이 반전된 네거티브(negative) 이미지를 원래의 포지티브(positive) 이미지로 되돌리는 원리는 생각보다 간단합니다. 핵심은 각 픽셀의 빨강(R), 초록(G), 파랑(B) 값을 255 - 현재 값으로 바꿔주는 것입니다. 이렇게 하면 밝은 부분은 어둡게, 어두운 부분은 밝게 반전되면서 원본 이미지가 자연스럽게 복원됩니다.네거티브 → 포지티브 변환 절차이미지 로딩: ImageIO.read() 메서드로 변환할 이미지 파일을 읽어옵니다.크기 확인: 이미지의 가로(width)와 세로(height) 크기
세피아(Sepia) 효과는 사진에 따뜻하고 빈티지한 갈색빛 감성을 더하는 대표적인 이미지 필터입니다. 이 글에서는 Java의 BufferedImage와 Color 클래스를 활용해 컬러 이미지를 세피아 이미지로 변환하는 알고리즘과 전체 구현 코드를 단계별로 살펴보겠습니다.세피아 변환 알고리즘컬러 이미지를 세피아 톤으로 바꾸는 핵심 원리는 다음과 같습니다.이미지의 각 픽셀에서 빨강(Red), 초록(Green), 파랑(Blue) 값을 추출합니다.세 색상 값의 평균값을 계산합니다.깊이(depth)와 강도(intensity) 값을 정의합니다
개요이미지 처리 작업에서 컬러 이미지를 그레이스케일(흑백)로 변환하는 일은 매우 기본적이면서도 자주 사용되는 기법입니다. 보통은 OpenCV 같은 전문 라이브러리를 활용하지만, Java 표준 라이브러리(java.awt, javax.imageio)만으로도 충분히 간단하게 구현할 수 있습니다. 이 글에서는 외부 라이브러리 없이 순수 Java 코드만으로 이미지를 그레이스케일로 변환하는 방법을 알아보겠습니다.그레이스케일 변환의 원리컬러 이미지는 각 픽셀이 빨강(Red), 초록(Green), 파랑(Blue) 세 가지 색상 값으로 이루어져 있
이미지 처리에서 미러 이미지(mirror image)란 원본 이미지를 좌우로 뒤집은 결과물을 의미합니다. Java에서는 픽셀 단위로 이미지를 조작하여 손쉽게 미러 효과를 구현할 수 있습니다. 이 글에서는 BufferedImage와 ImageIO 클래스를 활용해 미러 이미지를 만드는 과정을 단계별로 살펴보겠습니다.미러 이미지 생성 절차ImageIO.read() 메서드를 사용하여 원본 이미지를 읽어옵니다.이미지의 높이(height)와 너비(width)를 구합니다.결과를 저장할 빈 BufferedImage 객체를 생성합니다.중첩 for
이미지에 워터마크를 삽입하면 사진의 무단 사용을 막고 저작권을 보호하거나 브랜드를 알리는 데 큰 도움이 됩니다. 이 글에서는 자바의 BufferedImage와 Graphics 클래스를 활용해 주어진 이미지 위에 Hello라는 워터마크를 그리고, 결과물을 새 파일로 저장하는 방법을 단계별로 살펴봅니다. 워터마크 구현 순서 1. 원본 이미지 불러오기 ImageIO.read() 메서드를 사용해 디스크에 있는 이미지 파일을 읽어 BufferedImage 객체로 변환합니다. 2. 출력용 빈 이미지 생성 원본과 같은 크기의 새로운 Buf
OpenCV의 Core 클래스가 제공하는 flip() 메서드를 사용하면 이미지를 x축 또는 y축을 기준으로 손쉽게 뒤집을 수 있습니다. 이 메서드는 다음과 같은 세 가지 매개변수를 받습니다.소스 행렬(src): 원본 이미지의 데이터를 담고 있는 행렬대상 행렬(dst): 처리 결과 이미지를 저장할 빈 행렬플립 코드(flipCode): 뒤집을 방향을 지정하는 정수 값 (0 – x축 기준 상하 반전, 양수(+) – y축 기준 좌우 반전, 음수(-) – x축과 y축 모두 반전)이미지를 뒤집는 절차loadLibrary() 메서드를 사용해 O
Java에서 두 이미지가 얼마나 유사한지 확인하려면 각 픽셀의 RGB 값을 하나씩 대조하는 방법을 사용할 수 있습니다. 별도의 외부 라이브러리 없이 JDK에 기본 포함된 ImageIO와 BufferedImage 클래스만으로도 손쉽게 구현할 수 있습니다. 이미지 비교 절차 ImageIO.read() 메서드를 사용하여 두 이미지를 모두 읽어 들입니다. 두 이미지의 너비와 높이를 가져와 서로 동일한지 확인합니다. 각 픽셀 값을 읽어 두 이미지의 RGB 값을 구합니다. 두 이미지의 RGB 값 차이를 모두 더합니다. 다음 공식을 사용하여