728x90

시간 영역의 신호를 주파수 영역으로 변환하여 처리나 해석하는 이론이 푸리에 변환 Fourier Transform 입니다. 신호처리 분야에서 주파수 영역 분석을 위한 중요한 이론이기도 합니다. 영상처리에서는 이미지를 2차원 신호로 보고 푸리에 변환을 이용할 수 있으며, 이미지 공간 정보를 주파수 성분으로 바꾸어 분석할 수 있습니다. 분석을 통한 응용은 이미지 필터링, 압축, 복원등에 활용됩니다.

 

푸리에 변환은 이론적으로 4가지 형식으로 구분됩니다. 영상처리에 활용되는 기법은 이산 푸리에 변환 DFT (Discrete Fourier Transform) 입니다. 아래는 2차원 이산 푸리에 변환 수식이며 오일러 공식과 결합된 형태 입니다.

 

 

여기서 f(x,y)는 원본 이미지의 픽셀 값, F(u,v)는 주파수 평면에서의 값, M과 N은 이미지 크기인 Width와 Height 입니다. 추가로 푸리에 변환 요소에는 각 주파수 성분의 세기를 나타내는 크기 Magnitude와 성분의 위치 정보를 나타내는 위상 Phase 정보가 있으며, 위상 정보는 이미지의 구조를 유지하는데 중요한 요소입니다.

 

이미지를 푸리에 변환하면 최종 주파수 영역에 중심에는 저주파, 바깥쪽에는 고주파로 구성됩니다. 고주파는 이미지에서 물체의 윤곽선과 같은 에지 Edge 성분들을 의미하고 저주파는 물체의 전반적인 형태를 나타냅니다. 따라서 응용에서는 이러한 특징을 이용하여 저역통과 Low-pass 필터링 및 고역통과 High-pass 필터링을 통해 이미지의 경계 강조나 블러 효과를 낼 수 있습니다. 이미지 압축에서는 고주파 성분이 적으면 적을 수록 작은 정보만으로 이미지 재구성이 가능해지며, 대표적으로 JPEG 손실 압축 알고리즘에서 푸리에 이론의 일종인 이산 코사인 변환 DCT(Discrete Cosine Transform)을 사용합니다.

 

코드를 통해 푸리에 활용 방법을 확인해 보겠습니다. 실무에서는 C/C++, Python, Matlab 등 알고리즘 구현시 FFT (Fast Fourier Transform)을 이용합니다. DFT의 계산 복잡도 때문에 FFT를 활용하게 되며, 예를 들어 샘플 수가 N=1024일 때 DFT는 약 100만번의 연산이 필요한 반면 FFT는 10,000번의 연산이 필요합니다. 아래와 같이 파이썬 Numpy에서는 “np.fft.fft2” 함수를 사용하여 이미지 평면을 주파수 평면으로 변환하며, “np.fft.fftshift” 함수를 통해 저주파 성분을 중심으로 이동 시킵니다. 반대로 주파수 평면에서 이미지 평면으로 변환 시, “np.fft.ifftshift” > “np.fft.ifft2” 함수 순으로 적용할 수 있습니다. 

 

FFT의 이론 및 응용에 대해서는 추후 예와 함께 좀더 상세히 다루도록 하겠습니다.

 

import cv2
import numpy as np

# 이미지 불러오기 (그레이스케일)
img = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)

f = np.fft.fft2(img) # 푸리에 FFT 변환
fshift = np.fft.fftshift(f)  # 중심 이동

magnitude_spectrum = 20 * np.log(np.abs(fshift)) # 주파수 스펙트럼 확인

f_ishift = np.fft.ifftshift(fshift_filtered) # 중심 복원
img_ifft = np.fft.ifft2(f_ishift) # 역 FFT 적용

# 실수 이미지 변환
img_re = np.abs(img_ifft)
728x90
728x90

이미지에서 우리가 원하는 영역을 찾거나 추출할 때 필요한 방법이 이진화 Binarization 입니다. 물체 탐색, 물체 추적, 이미지 분할 등 알고리즘을 구현할 때 필수적으로 사용해야하는 기법이 이진화 기술들입니다. 이진화 방법에는 다양한 기술들이 있으며, OpenCV 에서 제공하는 기술들 중 하나인 적응적 이진화 기술 Adaptive Thresholding Method에 대해 알아보겠습니다.

 

이진화 방법은 크게 전역적 처리 Global Processing과 지역적 처리 방법 Local Processing 방법으로 구분할 수 있습니다. OpenCV에서 제공하는 “adaptiveThreshold” 방법은 지역적 처리 방법과 적응적 방법이 합쳐진 이진화 방법입니다. Python에서는 아래와 같이 “cv2.adaptiveThreshold” 명으로 적용해 볼 수 있으며, 입력 변수는 아래와 같습니다.

 

[Python] dst = cv2.adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)

(입력 변수 설명)

- src: 입력 이미지 (Gray Scale Image)

- maxValue: 임계값 Threshold을 초과한 픽셀에 적용할 값 (일반적으로 255)

- adaptiveMethod: 1) cv2.ADAPTIVE_THRESH_MEAN_C, 2) cv2.ADAPTIVE_THRESH_GAUSSIAN_C

- thresholdType: 1) cv2.THRESH_BINARY, 2) cv2.THRESH_BINARY_INV

- blockSize: 픽셀 임계값을 계산할 영역 크기 (홀수: 3, 5, 7 ...)

- C: 계산된 임계값에서 빼는 상수 (일반적으로 0 또는 2~10)

 

여기서 “cv2.ADAPTIVE_THRESH_MEAN_C”는 “blockSize”가 3이라면 3x3 크기 영역 안에 평균 값에서 “C”를 뺀 값을 임계값으로 사용하게 됩니다. “cv2.ADAPTIVE_THRESH_GAUSSIAN_C”는 3x3 크기 영역 안에 가우시안 가중 평균값에서 “C”를 뺀 값을 임계값으로 사용합니다. 앞에서 언급했듯이 “blockSize”는 3은 3x3, 5는 5x5의 블럭을 의미하며 블럭 크기가 작아질 수록 잡음 Noise에 민감해지고 너무 크면 지역적 처리의 이점이 줄어들 수 있으니 설정 시 고민이 필요할 수 있습니다.

 

C/C++ 코드를 사용한다면 아래와 같이 사용할 수 있습니다. 파이썬 함수와 다르게 결과 이미지는 입력 변수와 함께 설정해야 합니다. (dst = 결과 이미지)

[C/C++] adaptiveThreshold(src, dst, maxValue, adaptiveMethod, thresholdType, blockSize, C)

 

지역적이면서 적응적 이진화 방법은 이미지에 조명이 균일하지 않거나 배경이 복잡하여 명암이 불균일한 경우 유용할 수 있으며, 문서 이미지에서 문자 추출 시에도 잘 활용될 수 있습니다. 아래는 파이썬과 C/C++에서 “adaptiveThreshold”를 활용한 예이니 참고해서 보면 좋을 듯 합니다.

 

import cv2

# 그레이 이미지 읽기
img = cv2.imread('grayimage.jpg', cv2.IMREAD_GRAYSCALE)

# 가우시안 적응형 이진화
thresh = cv2.adaptiveThreshold(
    img,
    255,
    cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
    cv2.THRESH_BINARY,
    11,
    2
)

cv2.imshow("Adaptive Threshold", thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

#include <opencv2/opencv.hpp>
using namespace cv;

int main() {
    // 이미지 불러오기 (그레이스케일)
    Mat src = imread("grayimage.jpg", IMREAD_GRAYSCALE);
    Mat dst;
    // 적응형 이진화 적용
    adaptiveThreshold(
        src,              // 입력 이미지
        dst,              // 출력 이미지
        255,              // 최대값
        ADAPTIVE_THRESH_GAUSSIAN_C,  // 적응형 방법
        THRESH_BINARY,    // 임계값 타입
        7,               // 블록 크기 (홀수)
        2                 // C 상수
    );

    // 결과 출력
    imshow("Original", src);
    imshow("Adaptive Threshold", dst);
    waitKey(0);
    return 0;
}
728x90
728x90

영상처리 기술에서 보간법은 이미지 확대나 회전, 좌표 변환 기술 Affine Transform 등 알고리즘 구현 시 빈번히 사용됩니다. 머신 러닝 Machine Learning 및 딥러닝 Deep Learning 등 특히 CNN 계열에 Coarse Map을 Dense Map으로 Up-Sampling시 활용되는 기술이기도 합니다. 이미지를 두 배로 확대할 때 보간법은 새로운 픽셀 Pixel 값을 그럴듯하게 예측하는 기술로 볼 수 있습니다. 이론적인 부분은 영상처리 기술에서 다루도록 하겠습니다.

 

기본적인 보간법 세가지는 아래와 같습니다.

 

1. 최근접 이웃 보간법 Nearest Neighbor Interpolation

- 소수점 좌표에서 가장 가까운 정수 좌표 픽셀 사용, 수행속도가 가장 빠르지만 계단 현상 및 깨짐 현상 발생

 

2. 양선형 보간법 Bilinear Interpolation

- 주변 4개 픽셀을 사용해 선형 평균을 이용, 최근접 보다 자연스러운 결과를 보이고 일반적으로 많이 활용되는 기술

 

3. 양큐빅 보간법 Bicubic Interpolation

- 주변 16개 픽셀을 활용하며 앞에 두 기술보다 자연스러우며, Super Resolution 기술들에서 비교 결과로 많이 사용, 고화질 이미지 편집에 사용되는 기술이며 처리속도는 느림

 

이미지 회전 시 보간법이 사용되는 이유는 회전은 수학적으로 기존 픽셀 좌표를 회전 행렬로 이동시키는 과정입니다. 회전 시 생성되는 좌표는 보통 소수점 좌표가 되며, 새로운 평면에 매칭 시 좌표는 소수점이 아닌 정수이기때문에 빈공간이 생기게 됩니다. 그 빈공간을 채워주기 위해 보간법이 활용됩니다. 예를 들어 좌표 (5, 5)를 30도 회전하면 (5.3, 3.9) 되므로 실제 좌표 매칭을 위해서는 주변 픽셀 (5, 3), (6, 3), (5, 4), (6, 4)를 이용하여 추정해야 합니다.

 

OpenCV에서 이미지 회전 및 확대 시 보간법을 지정할 수 있습니다. 아래는 파이썬 활용시 CV 상수 입니다. 첫번째 예제는 회전시 파이썬 코드이며, 이전 블로그에서 설명한 “cv2.warpAffine” 함수를 사용합니다. 두번째 예제는 “cv2.resize” 함수를 활용한 보간법 사용 예입니다. 

 

1. 최근접 이웃 보간법 - cv2.INTER_NEAREST

2. 양선형 보간법 - cv2.INTER_LINEAR

3. 양큐빅 보간법 - cv2.INTER_CUBIC

4. Lanczos 보간법 - cv2.INTER_LANCZOS4

 

# 이미지 회전 예제
import cv2
import numpy as np

# 이미지 로드
img = cv2.imread('lena.jpg')

# 회전 중심, 각도, 스케일
center = (img.shape[1] // 2, img.shape[0] // 2)
angle = 50
scale = 1.0

# 회전 행렬 생성
M = cv2.getRotationMatrix2D(center, angle, scale)

# 양큐빅 보간법 사용예
rotated = cv2.warpAffine(img, M, (img.shape[1], img.shape[0]), flags=cv2.INTER_CUBIC)

# 결과 보기
cv2.imshow('Rotated Image', rotat_result)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

# 이미지 확대 예제
img = cv2.imread('lena.jpg')

# 2배 확대, 선형 보간법
resized = cv2.resize(img, None, fx=2, fy=2, interpolation=cv2.INTER_LINEAR)

# 결과 보기
cv2.imshow('Resized Image', resiz_result)
cv2.waitKey(0)
cv2.destroyAllWindows()
728x90
728x90

Affine Transform 어파인 변환 (또는 아핀 변환)은 컴퓨터 비젼과 로봇, 그래픽스 등에서 사용하는 좌표 변환 기술 입니다. 일반적인 영상처리에서는 그 좌표점에 Intensity를 다뤘다면 기하학 변환에서는 좌표의 변경을 통해 물체의 위치, 크기, 기울기, 방향 등을 변환하는 기법으로 볼 수 있습니다.

 

선형 변환과 이동을 조합하여 2차원 또는 3차원 변환을 할 수 있어 수학적으로는 선형 대수 Linear Algebra와 밀접합니다. 간략하게 정의를 보게 되면, 변환된 좌표 (x’, y’)는 원래 좌표 (x, y)에 대해 다음과 같이 표현할 수 있습니다.

 

[ x'; y'] = [a b; c d][x; y] + [e; f]

여기서 [a b; c d] : 선형 변환 행렬, [e; f]: 이동 벡터

 

위 변환을 동차 좌표 homogeneous coordinates로 바꾸면 아래의 같이 하나의 행렬곱으로 표현 가능합니다.

 

[x'; y'; 1] = [a b e; c d f; 0 0 1][x; y; 1]

 

동차 좌표계 Homogeneus coordinates 는 우리가 일반적으로 사용하는 카르테시안 좌표계와 달리 추가적인 차원을 포함하여 변환을 쉽게 수행할 수 있습니다. 특히 Affine Transform과 Projective Transform 같은 변환을 하나의 행렬 연산으로 통합하기 위해 사용됩니다.

 

선형 변환 행렬은 변환 종류에 따라 아래와 같습니다. 이동 Translation은 이동 벡터에 따른 위치 변환이며, 이 외 변환은 중심에 변화가 없는 선형 변환으로 볼 수 있습니다. Affine Transform의 주요 특징은 1) 변환 후에도 직선은 그대로 직선인 직선성 유지, 2) 평행한 선은 변환 후에도 평행 유지, 3) 확대 및 축소 시 모양 유지, 4) 변환 후에도 역변환 가능 정도로 요약할 수 있습니다. 기하학 변환은 실무에서 이미지 왜곡 보정, 물체 추적, 이미지 파노라마, 카메라 켈리브레이션, 증강 현실 등에 활용되며 3D 게임에 기본 이론으로도 볼 수 있습니다.

 

Translation (이동 변환) 위치를 이동
Scaling (크기 변환) 크기를 조절
Rotation (회전 변환) 축을 중심으로 회전
Shearing (기울임 변환) 평행 형태 기울임 변형
Reflection (반사) 대칭 이동  

 

아래는 Affine Transform 중 이미지 위치 변환에 대한 Python, Matlab, C# 코드 활용 예입니다. 파이썬에서는 warpAffine 함수를 사용할 수 있으며, 매트랩에서는 affine2d와 imwarp을 활용 할 수 있습니다. C와 C#에서는 OpenCV를 활용하여 쉽게 테스트 해 볼 수 있습니다.

 

import cv2
import numpy as np
# 이미지 로드
image = cv2.imread("lena.jpg")
# 변환 행렬 생성 (x축 50px 이동, y축 30px 이동)
M = np.float32([[1, 0, 50], [0, 1, 30]])
# Affine 변환 적용
transformed_image = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))
# 결과 출력
cv2.imshow("Original Image", image)
cv2.imshow("Affine Transformed Image", transformed_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
% 이미지 로드
image = imread('lena.jpg');
% Affine 변환 행렬 생성
T = affine2d([1 0 0; 0 1 0; 50 30 1]); % x축 50px, y축 30px 이동
% Affine 변환 적용
transformed_image = imwarp(image, T);
% 결과 출력
subplot(1,2,1), imshow(image), title('Original Image');
subplot(1,2,2), imshow(transformed_image), title('Affine Transformed Image');
using OpenCvSharp;
class Program
{
    static void Main()
    {
        // 이미지 로드
        Mat image = Cv2.ImRead("image.jpg", ImreadModes.Color);
        // 변환 행렬 생성 (x축 50px 이동, y축 30px 이동)
        Mat affineMatrix = new Mat(2, 3, MatType.CV_32F, new float[] { 1, 0, 50, 0, 1, 30 });
        // Affine 변환 적용
        Mat transformedImage = new Mat();
        Cv2.WarpAffine(image, transformedImage, affineMatrix, new Size(image.Width, image.Height));
        // 결과 출력
        Cv2.ImShow("Original Image", image);
        Cv2.ImShow("Affine Transformed Image", transformedImage);
        Cv2.WaitKey(0);
    }
}
728x90
728x90

When using deep learning in Python, setting up the GPU and CUDA environment is important. There are two main ways to do this:

 

● Personal use – You can install the latest CUDA and PyTorch versions that work best with your GPU.

Work – You may need to use a specific version of PyTorch to match project requirements.

 

To make sure everything runs smoothly, your GPU driver, CUDA, cuDNN, and PyTorch versions must be compatible. Since reinstalling or rolling back versions can take a lot of time, it’s best to set up the environment correctly from the start and focus on actual development.

 

This blog explains how to set up the environment based on PyTorch 1.13, assuming your GPU meets the requirements.

 

1. Checking GPU Environment: Run ‘cmd’ and execute ‘nvidia-smi’ to check the GPU status

Verify the installed CUDA and driver versions. The CUDA version displayed in the command prompt represents the highest supported version, but older versions are also compatible. As of April 2025, the latest driver update for RTX 30 series GPUs includes CUDA 12.x and driver 5xx.xx. Visit the official website below to check for the latest updates and install them accordingly.

 

NVIDIA Driver: docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#cuda-major-component-versions

 

 

2. Checking CUDA Version for PyTorch 1.13

PyTorch can be installed using either conda or pip, and you should set up the CUDA environment based on your personal system before proceeding with the installation. In this step, we are only checking the CUDA version. PyTorch 1.13 is confirmed to be compatible with CUDA 11.6x and 11.7x.

 

pytorch.org/get-started/previous-versions/

 

3. Capability Based on GPU Environment

Additionally, you need to check the Capabilityof your specific GPU. For RTX 3050, 3060, 3070, 3080, and 3090, the capability is 8.6 and they can be used with CUDA 11.1 or later.

 

GPU Capability: en.wikipedia.org/wiki/CUDA

 

4. Setting Up the CUDA Environment and Installing PyTorch

Based on PyTorch 1.13, install CUDA 11.7.x, followed by cuDNN 11.x, considering the GPU capability. For cuDNN, extract the files and copy them into the folder where CUDA is installed to complete the environment setup. Finally, install PyTorch 1.13 using either pipor conda, as previously explained.

 

CUDA: developer.nvidia.com/cuda-toolkit-archive

cuDNN: developer.nvidia.com/rdp/cudnn-archive

 

5. Checking Environment Setup and Functionality: nvcc - - version

You can verify the installation by running "nvcc --version" (or "nvcc -V") in the command prompt “cmd”. The following code can be used to check whether the GPU is available. 

import torch
print(torch.cuda.is_available())


Additionally, in practical applications, the code below can be used to automatically assign the device.

device = torch.device('cuda:0') if torch.cuda.is_available() else torch.device('cpu')

 

** Refer to korean version

728x90
728x90

파이썬 Python 기반에 Deep Learning(D/L) 활용 시 GPU 및 CUDA 환경 설정에 대한 설명입니다. 환경 설정에 방향은 두 가지 정도로 나뉠 수 있습니다. 개인적인 활용에서는 GPU 환경에 맞춰 CUDA 및 Pytorch 최신 환경으로 구성할 수 있고, 업무 환경 상 Pytorch 특정 버전에 맞춰 환경을 구성해야 될 수도 있겠습니다.

 

환경 설정에서는 GPU 드라이버, CUDA, cuDNN, Pytorch 버전이 호환되어야 정상 활용 가능하므로 개인적인 환경에 따라 다를 수 있겠지만 상황에 따라 재설치 및 Rollback 시간이 상당하므로 가능하면 환경설정에 시간 소모를 줄이고 개발에 집중하는 것이 좋다고 생각합니다.

 

현 블로그에서는 기본적으로 GPU 환경 조건이 충분하다는 상황에서 Pytorch 1.13 기준에서 환경 설정 과정을 설명합니다.

 

1. GPU 환경 확인: cmd 실행 후 ‘nvidia-smi’ 확인, 드라이버 업데이트

CUDA 버전과 드라이버 버전 확인 합니다. cmd 창에 출력되는 CUDA 버전은 지원 가능한 버전이므로 이하 버전들도 적용 가능합니다. 23년 12월 기준 RTX 30 시리즈 드라이버 최신 업데이트 시 CUDA 12.x와 드라이버 5xx.xx 입니다. 아래 주소 확인 후 최신 업데이트 합니다.

 

NVIDIA Driver: docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html#cuda-major-component-versions

 

 

 

2. Pytorch 1.13 기준 CUDA 버전 확인

파이토치 설치 방법은 conda와 pip으로 구분되어 있으며 개인 환경에 맞춰 CUDA 환경 구성 후 설치하면 됩니다. 현 시점에서는 CUDA 버전만 확인합니다. 파이토치 1.13은 CUDA 11.6x와 11.7x와 연동되는 것을 확인 할 수 있습니다.

 

pytorch.org/get-started/previous-versions/

 

 

3. GPU 환경에 따른 Capability

추가로 본인 GPU 환경에 따른 Capability를 확인해야 됩니다. RTX 3050/30603070/3080/3090의 경우 Capability 8.6 이며, 이는 CUDA 11.1 이상에서 활용 가능함을 확인 할 수 있습니다.

 

GPU Capability: en.wikipedia.org/wiki/CUDA

 

 

 

4. CUDA 환경 구축 및 Pytorch 설치

파이토치 1.13 호환성 기준으로 Capability 고려하여 CUDA 11.7.x 설치 후 cuDNN 11.x 설치하면 됩니다. cuDNN의 경우 압축 해제 후 파일들을 CUDA 설치된 폴더에 복사/붙여넣기하여 환경 구성을 완료합니다. 이후 앞에서 확인한 파이토치 1.13을 pip 또는 conda로 최종 설치합니다.

 

CUDA: developer.nvidia.com/cuda-toolkit-archive

cuDNN: developer.nvidia.com/rdp/cudnn-archive

 

 

 

5. 환경 구성 및 동작 확인: nvcc - -version

cmd 창에서 ‘nvcc –V’ 또는 ‘nvcc –version’으로 설치 확인 할 수 있습니다. 아래 코드를 통해 GPU 사용 및 할당 가능한지 확인할 수 있습니다.

 

import torch

print(torch.cuda.is_available()) # True면 활용 가능

 

추가로 실무에서 아래 코드로 디바이스 자동 지정 할 수 있습니다.

device = torch.device('cuda:0') if torch.cuda.is_available() else torch.device('cpu')

728x90
728x90

프로그래밍을 할 수 있는 언어는 크게 인터프리터 Interpreter와 컴파일 Complile 언어로 구분할 수 있습니다. 앞에서 설명한 C-언어가 컴파일 언어의 대표 예입니다. 인터프리터 언어에는 요즘 많이 활용 중인 파이썬 Python과 매트랩 Matlab 언어가 있습니다.

 

매트랩 Matlab은 수치 컴퓨팅, 데이터 분석 및 시각화에 활발히 사용 됩니다. 인터프리터 언어 특성상 사용하기 쉽고 다양한 소프트웨어 패키지를 이용하여 물리, 수학, 금융 및 제어 시스템을 포함한 다양한 과학 및 엔지니어링 분야에서 널리 사용됩니다. 그러나 파이썬은 무료에 반해 매트랩은 유료로 사용할 수 있습니다.

 

파이썬 Python의 경우 인공지능 분야 활용 확대로 활용성이 급격히 상승한 언어 중에 하나이며 다양한 응용 분야에서 활용되고 있습니다. 웹 Web 개발, Deep Learning(D/L), 네트웍, 서버, 게임, GUI 등등. 다만 무료 사용은 장점이지만 파이썬 버전에 따른 활용에 주의할 필요도 있습니다.

 

넘피 NumPy, 판다스 Pandas, Matplotlib, scikit-learn 등의 라이브러리는 다양한 데이터 분석에 활용 됩니다. 장고 Django와 플라스크 Flask와 같은 프레임워크는 확장 가능한 웹 응용 프로그램을 쉽게 개발할 수 있으며, 인공지능 Artificial Intelligence 과 자연어 처리  Natural Language Processing  분야에서는 텐서플로우 TensorFlow와 파이토치 PyTorch와 같은 프레임워크를 활용하여 훈련하는데 사용됩니다.

 

SciPy와 SymPy와 같은 라이브러리는 과학적 컴퓨팅, 수학적 문제 해결, 시뮬레이션 수행을 위한 도구들을 제공합니다. Pygame 라이브러리는 간단한 비디오 게임을 작성하기 위한 모듈을 제공합니다.

 

파이썬은 그래픽 사용자 인터페이스(GUI) 개발하는 데 사용될 수 있으며, Tkinter, PyQt 및 Kivy와 같은 라이브러리는 Desktop Application을 쉽게 구축할 수 있습니다.

728x90

+ Recent posts