프로그래밍/Python 124

[python] TypeError: argument 'data': 'memoryview' object cannot be converted to 'PyBytes'

문제점 및 증상다음과 같이 "fastcrc"를 이용한 간단한 CRC 계산 코드를 작성하였습니다.10 바이트를 그냥 던져서 계산하는 것과, 5바이트씩 나누어 계산한 결과가 같은지 확인하는 예시입니다.메모리 뷰를 이용한 것은 대량 메모리에 대한 CRC 계산을 위하여, 전체 메모리를 복사하지 않도록 하기 위해서 였습니다.from fastcrc import crc16data = b'1234567890'crc = crc16.kermit(data)print(f'crc16 (1) = {crc:04X}')mv_data = memoryview(data)temp_crc = 0temp_crc = crc16.kermit(mv_data[0:5]), temp_crc)temp_crc = crc16.kermit(mv_data[5:]..

[python] LM73 TI 온도센서에서 온도값 읽어오기

개요LM73CIM 칩은 Texas Instruments에서 제조한 디지털 온도 센서입니다. I2C 인터페이스를 사용하여 Raspberry Pi나 다른 마이크로컨트롤러와 통신할 수 있습니다. 본 글에서는 라즈베리 파이에서 I2C로 LM73CIM 칩으로부터 온도값을 읽어오는 방법에 대하여 설명합니다.라즈베리 파이 I2C 활성화하기"raspi-config"를 이용하여 I2C를 활성화하거나, "/boot/firmware/config.txt" 파일에서 다음 설정 부분의 주석을 해제해 주어야 합니다.dtparam=i2c_arm=on"/boot/firmware/config.txt" 파일의 설정을 변경한 후, 라즈베리 파이를 재부팅 합니다.재부팅한 이후에 "/dev" 폴더에 i2c 관련 장치가 표시됩니다.$ ls /d..

[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..

[python] netmask 문자열로 CIDR 형식의 비트 개수를 반환하는 방법

개요netmask 문자열(예: "255.255.255.0")을 CIDR 형식의 비트 개수(접두사 길이)를 얻는 방법을 정리해 둡니다.CIDR 표기법이란?CIDR(Classless Inter-Domain Routing) 형식은 IP 주소와 네트워크 마스크를 표현하는 간결하고 유연한 방법입니다. CIDR 표기법의 주요 특징은 다음과 같습니다.IP 주소와 접두사 길이로 구성: 예를 들어, 192.168.0.0/24 형태로 표현합니다.접두사 길이: '/' 뒤의 숫자(0-32)로, 네트워크 부분의 비트 수를 나타냅니다.유연한 네트워크 구분: 기존의 클래스 기반 주소 체계와 달리, 네트워크와 호스트 부분을 유연하게 정의할 수 있습니다.효율적인 IP 주소 관리: 네트워크 주소 자원을 절약하고 효율적으로 할당할 수 있..

[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") #..

728x90