프로그래밍/Python 99

[opencv] 종횡비 고정하여 이미지 크기 조정하기

개요이미지의 크기를 조정할 때 일반적으로 cv2.resize() 함수를 이용하게 됩니다.이 때, 이미지의 종횡비를 왜곡하지 않고 테두리를 추가는 방법들을 살펴 보겠습니다.일반적인 이미지 복사무작위 이미지를 HD(1280 X 720)으로 크기를 조정할 때 다음과 같이 종횡비를 고정하여 만들 수 있습니다. target_height, target_width = 720, 1280 img_org = cv2.imdecode(np.fromfile(full_image_filename, dtype=np.uint8), cv2.IMREAD_UNCHANGED) img_height, img_width = img_org.shape[:2] height_scale, width_scale = (img_height..

[Python] numpy 이용 시 발생한 'ImportError: libopenblas.so.0: cannot open shared object file' 오류

문제점 및 증상개발 환경SBC : Beaglebone blackOS : debianPython : 3.9.2"numpy" 패키지가 필수라 설치하고 실행하였더니 다음과 같은 오류가 발생하였습니다.Traceback (most recent call last): File "/home/debian/.local/lib/python3.9/site-packages/numpy/core/__init__.py", line 24, in from . import multiarray File "/home/debian/.local/lib/python3.9/site-packages/numpy/core/multiarray.py", line 10, in from . import overrides File "/home..

[python] 경로 문자열에서 파일명, 확장자 분리하기

개요전체 경로 문자열에서 폴더명, 파일명, 확장자명을 각각 분리하는 방법을 알아 보겠습니다.폴더명다음과 같이 os.path.dirname() 함수를 이용하면 전체 경로 문자열에서 폴더명을 손쉽게 얻을 수 있습니다.from os import pathfile_path = '/path/to/filename.ext'dirname = path.dirname(file_path)print(f'{dirname=}')# dirname='/path/to'파일명 (확장자 포함)다음과 같이 os.path.basename() 함수를 이용하면 전체 경로 문자열에서 확장자가 포함된 파일명을 손쉽게 얻을 수 있습니다.from os import pathfile_path = '/path/to/filename.ext'basename = ..

[python] RGBA 형식의 이미지 찾기

개요인터넷에서 수집한 자료 중에 RGBA 형식의 이미지가 확장자만 "*.jpg"로 저장되어 있는 경우가 종종 있습니다.내부적으로 이미지 처리를 한 후에 cv2.imwrite() 함수를 이용하여 JPG로 저장할 경우 다음과 같이 "RGBA" 형식의 이미지는 JPG로 저장할 수 없다는 오류가 발생합니다.... File "/usr/local/lib/python3.8/dist-packages/PIL/Image.py", line 2240, in save save_handler(self, fp, filename) File "/usr/local/lib/python3.8/dist-packages/PIL/JpegImagePlugin.py", line 631, in _save raise OSError(f"c..

[python] 아스키가 아닌 문자가 포함된 이미지 파일 로딩하기 (imread)

문제점 및 증상다음과 같이 OpenCV를 이용하여 이미지를 로딩하는데 파일 이름이 한글이 포함되어 있을 경우 다음과 같은 WARN이 발생하면서 이미지를 로딩하지 못하였습니다.images_path='D:\\Dev\\Python\\python-test\\cv\\images'image_file='D:\\Dev\\Python\\python-test\\cv\\images\\01비교-1.jpg'[ WARN:0@0.014] global D:\a\opencv-python\opencv-python\opencv\modules\imgcodecs\src\loadsave.cpp (239) cv::findDecoder imread_('D:\Dev\Python\python-test\cv\images\01?해결 방법다음과 같이 "n..

[PyQt5] 사용자 위젯에서 배경 그리기

개요 위젯을 상속받은 사용자 위젯의 배경을 커스터마이징하여 그리는 방법을 알아보도록 하겠습니다. 배경 그리기 Qt에서 배경 등은 QPainter 객체를 통하여 그릴 수 있습니다. 이를 위해서는 paintEvent() 이벤트 처리 함수를 오버라이드 합니다. 다음 예제는 paintEvent() 함수를 override하고 간단하게 배경을 붉은색으로 칠하는 예제입니다. import sys from PyQt5.QtWidgets import QWidget, QApplication from PyQt5.QtGui import QPainter, QColor, QPen class MyWidget(QWidget): def __init__(self): super().__init__() self.initUI() def init..

[Qt] 창을 전체화면으로 표시하기

개요 특정 윈도우 창을 파워포인트 프리젠테이션 화면처럼 모니터 전체를 채워서 표시해야할 경우가 있습니다. 이를 Qt에서는 어떻게 구현하는지 알아보도록 하겠습니다. 전체화면으로 창 띄우기 특정 창을 파워포인트 프리젠테이션 화면처럼 모니터 전체를 채워서 표시 방법은 간단하게 "showFullScreenMode()" 함수를 호출하면 됩니다. 다음은 "showFullScreenMode()"를 이용한 간단한 예제입니다. from PyQt5.QtWidgets import QApplication, QMainWindow class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("Fullscreen Window") #..

[python] itertools.pairwise() 함수 사용법

GStreamer로 작업을 하다보면, 파이프라인 구축을 위하여 생성된 항목들을 연결 (link)해주어야 합니다. C에서는 gst_bin_add_many() 함수가 있어서 간단하게 구현이 가능한데, 파이썬에서는 해당 함수 대신 Element.link_many() 함수를 이용해야 합니다. 그래서 link_many() 함수가 어떻게 구현이 되어 있는지 궁금하여 찾아 보니, 다음과 같이 구현되어 있었습니다. from itertools import tee def pairwise(iterable): "s -> (s0,s1), (s1,s2), (s2, s3), ..." a, b = tee(iterable) next(b, none) return zip(a, b) Gst.Element에 다음과 같이 link_many()..

[Python] Flask 서버 멀티 스레드로 구동하기

문제점 및 증상 Qt를 이용한 GUI와 함께 간단한 Flask 웹 서비스를 이용해야하는 상황이 있었습니다. 처음에는 다음과 같이 Flask를 MVC 형식으로 구현하고, Flask 실행부만 스레드로 구현하면 아무런 문제가 없을 줄 알고 실행해 보았습니다만, 다음과 같은 오류가 발생되고 정상적으로 실행되지 않았습니다. Exception in thread Thread-6 (handleFlask): Traceback (most recent call last): File "C:\Dev\Python\Python310\lib\threading.py", line 1016, in _bootstrap_inner self.run() File "C:\Dev\Python\Python310\lib\threading.py", li..

[python] ModuleNotFoundError: No module named 'packaging'

문제점 및 증상NVIDIA AGX Orin에 JetPack 6.0DP 설치하고, PyTorch를 다음과 같이 설치하였습니다.$ sudo apt-get -y update; $ sudo apt-get -y install python3-pip libopenblas-dev$ python3 -m pip install --upgrade pip$ pip install --no-cache https://developer.download.nvidia.cn/compute/redist/jp/v60dp/pytorch/torch-2.2.0a0+6a974be.nv23.11-cp310-cp310-linux_aarch64.whl 정상적으로 CUDA와 연동하여 동작하는지 다음과 같이 간단하게 확인해 보았는데, "ModuleNotFou..

728x90