최신 글
- WPF 시작하기 C# .NET Framwork를 통해 프로그래밍을 진행해 보겠습니다. 비쥬얼스튜디오에서 새 프로젝트를 만들어주세요. 저는 비쥬얼스튜디오 2022 커뮤니티 버전입니다. 검색창에 wpf를 검색해서 C# XAML태그가 있는 WPF앱 (.NET Framework)를 눌러주세요. 저는 연습용으로 만들어서 프로젝트 이름을 Practice로 지었습니다. 위치는 원하는 디렉토리로 설정해주세요. 이렇게 비쥬얼스튜디오 화면이 뜨면 완료입니다. 만약 위 화면을 다시 실행시키고 싶으시다면 지정된 경로로 들어가서 sln파일을 실행하면 됩니다. 위에 프로젝트 구성화면에서 솔루션 및 프로젝트를 같은 디렉토리에 배치 체크박스를 체크하시면 sln파일이 제 디렉토리를 기준으로 D:\git\CS-study\Practice\Practice.. 2023.04.10
- 계층적 군집화 계층적 군집(Hierarchical Clustering)은 n개의 군집으로 시작해 점차 군집의 개수를 줄여 나가는 방법입니다. 유클리디안 거리를 사용해서 계층적 군집분석을 시행해 보겠습니다. import matplotlib.pyplot as plt import numpy as np from scipy.cluster.hierarchy import dendrogram, linkage X = np.array([[1, 4], [2, 1], [4, 6], [4, 3], [5, 1]]) labels = ['a', 'b', 'c', 'd', 'e'] plt.figure(figsize=(7, 7)) plt.xlim(0, 7) plt.ylim(0, 7) plt.scatter(X[:, 0], X[:, 1]) for lab.. 2022.08.15
- 변수선택기법 보스턴 하우징 데이터셋을 이용해서 여러가지 변수선택기법들에 대해 알아보자. import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from sklearn.datasets import load_boston from sklearn.feature_selection import RFE, SelectFromModel, SequentialFeatureSelector from sklearn.linear_model import LinearRegression, ElasticNet, Ridge, Lasso from sklearn.model_selection import train_test_split from sk.. 2022.08.08
인기글
- nsis 2GB limit 우회하기 기존 포스팅에서 설치했던 nsis는 2GB제한이 존재한다. nsis를 통한 배포 패키징 하기 (tistory.com) nsis를 통한 배포 패키징 하기 지난 포스팅에서 pyinstaller을 통해 실행파일화 하는 방법을 알아보았는데요, 이번 포스팅에서는 직접 배포패키징까지 진행해 보겠습니다. 지난포스팅 파이썬 설치 파일 만들기 with pyinstaller (tisto tripleler.tistory.com 따라서 압축해야 할 내용이 2GB가 넘어가면 붉은 창과 함께 다음과 같은 오류가 발생한다. Internal compiler error #12345: error mmapping file () is out of range. Note: you may have one or two (large) stale t.. 2022.04.07
- 웹사이트 접근해서 html 파싱하기 티스토리 블로그의 첨부파일을 다운로드 해보는 코드를 알아보자. 우선 해당 url이 존재하는지를 확인하자. test (tistory.com) test test tripleler.tistory.com import requests url = 'https://tripleler.tistory.com/entry/test' try: page = requests.get(url) except Exception: print('error') else: if page.status_code == 200: print('success') else: print('not response') >>> succes requests 라이브러리의 get() 함수를 통해 해당 url이 존재하는 지 확인할 수 있다. 여기서 status_code .. 2022.05.09
- 동영상 잘라내기 어도비프로 라이선스가 다되어서 다른 프로그램을 통해 동영상을 편집하게 되었는데 이 짜증나는 놈이 앞에 워터마크? 비슷한걸 강제로 박아넣는 문제가 생겨버렸다. 딱히 홍보할 생각은 없고 아무튼 저 로고가 3초간 강제 재생되어서 파이썬으로 저 부분을 편집해볼 생각이다. 우선 동영상을 읽어오자. import sys import cv2 cap = cv2.VideoCapture('Raw.mp4') if not cap.isOpened(): print("Video open failed!") sys.exit() fps = cap.get(cv2.CAP_PROP_FPS) print('FPS:', fps) w = round(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) print('Frame width:', .. 2022.04.05
CV(컴퓨터 비전)
- OpenCV 기초 : 사진과 동영상 읽어오기 파이썬에서 OpenCV라이브러리는 다음 명령어를 통해 설치할 수 있다. pip install opencv-python 그리고 라이브러리는 다음 명령어를 통해 불러올 수 있다. import cv2 cv2라이브러리는 설치할 때와 불러올 때 이름이 다르니 주의하도록 하자. 그럼 이제 사진을 불러와보자. import sys import cv2 img = cv2.imread('logo.png') if img is None: print('Image load failed!') sys.exit() dst = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.imshow('img', img) cv2.imshow('gray', dst) cv2.resizeWindow('img', 500, 500) .. 2022.01.07
- 이미지 회전하기 1. 좌표 회전변환과 좌표축 회전변환 이미지를 처리하는 방법에 있어서 여러가지가 있을텐데요, 이번 포스팅에서는 이미지를 회전하는 법에 대해서 알아보겠습니다. 우선 회전에 대한 개념은 고등학교에서 배운 삼각함수와 동일합니다. 특정한 점 A(x, y)를 원점에 대하여 \( \theta \) 만큼 회전한 B의 좌표는 \(B(xcos(\theta)-ysin(\theta),\ ycos(\theta)+xsin(\theta))\) 로 나타낼 수 있습니다. 예를 들어 (1, 0)을 30도 회전하면 \((\frac{\sqrt{3}}{2}, \frac{1}{2})\) 가 됩니다. 이를 이용해서 각 픽셀의 위치만 회전시켜주면 이미지를 회전시킬 수 있습니다. \[\begin{pmatrix}x'\\ y'\end{pmatrix}.. 2022.02.03
- 이미지 전단변환 지난 포스팅에서는 Rotate(회전 변환)기법에 대해서 알아보았는데요, 이번 포스팅에서는 Shear(전단 변환)기법에 대해 알아보겠습니다. 지난 포스팅 링크 이미지 회전하기 (tistory.com) 이미지 회전하기 1. 좌표 회전변환과 좌표축 회전변환 이미지를 처리하는 방법에 있어서 여러가지가 있을텐데요, 이번 포스팅에서는 이미지를 회전하는 법에 대해서 알아보겠습니다. 우선 회전에 대한 개념은 tripleler.tistory.com Image Shear은 번역하면 전단 변환이라고 합니다. 말이 어려운데 기하학적으로 기울이는 평행사변형이라고 보시면 됩니다. 파란 그림을 검은 점을 원점으로 하여 전단 변환하였을 때 녹색 그림처렴 변하게 됩니다. x축 전단변환의 경우 각\( \theta \) 만큼 회전할 때 .. 2022.03.06
- Affine Transformation Affine Transformation Affine Transformation 을 우리말로 '표현하면 기하학적 변환' 입니다. 지난 포스팅에서 소개했던 회전변환 및 전단변환도 아핀변환중의 하나입니다. 이외에도 닮음변환, 평행이동, 대칭변환등이 이에 포함됩니다. 영상인식 딥러닝에서는 사진을 학습할 때 과적합을 방지하고, 한정된 데이터셋을 증강하기 위해 이러한 작업들을 진행하여 학습합니다. 아핀변환은 아핀행렬로 간단하게 표현이 가능합니다. 변환좌표(x', y')를 아핀행렬 M과 기존좌표 (x, y)로 나타내면 다음과 같은 관계식을 얻을 수 있습니다. \[\begin{pmatrix}x' \\ y'\end{pmatrix}=M \begin{pmatrix}x \\y \\ 1\end{pmatrix} \] 이때, 2차.. 2022.03.14
PyQt5
- PyQt5를 이용하여 동영상 플레이어를 만들어보자(1) 이 블로그의 포스팅은 기본적인 PyQt5에 대해 알고 있다고 가정한다. 이 블로그의 포스팅은 기본적인 파이썬 라이브러리에 대해 알고 있다고 가정한다. 파이썬 툴로는 파이참(PyCharm)을 사용한다. PyQt5란?? PyQt5는 Qt5 어플리케이션 프레임워크에 대한 파이썬 버전입니다. Qt는 플랫폼에 관계없이 다양한 기능을 포함하는 C++ 라이브러리이자 개발툴입니다. PyQt5는 이러한 1000여 개의 클래스들을 포함하는 파이썬 모듈의 모음입니다. PyQt5는 윈도우, 리눅스, macOS, 안드로이드, iOS를 지원합니다. PyQt5의 홈페이지(https://www.riverbankcomputing.com/software/pyqt/intro)에서 최신의 그리고 안정적인 버전의 PyQt5와 최신 버전의 문.. 2022.01.06
- PyQt5를 이용하여 동영상 플레이어를 만들어보자(2) 프로그래밍에서 중요한 것은 쓰레딩이다. 쓰레딩을 간단히 설명하자면 일반적으로 파이썬 코드는 코드의 짜임 순서대로 처리한다. 따라서 동영상 플레이어같은 프로그램을 만들 때 쓰레드를 사용하지 않는다면 동영상이 돌아가는 동안 어떠한 버튼 조작도 불가능하다는 소리이다. 왜냐하면 동영상을 처리중이니까. 현재 동영상을 보여주는 행동이 끝나야 다음 처리가 진행된다. 동영상은 동영상대로 버튼은 버튼대로 각각 돌아가야 하도록 도와주는 것이 쓰레드이다. 이건 이거대로 저건 저거대로 따로따로 일을 분할 해서 줘버리는 것이다. 이전 글(동영상 플레이어를 만들어보자(1)) 과 OpenCV 기초 블로그를 참조하여 다음 쓰레드를 구현하였다. https://tripleler.tistory.com/3 PyQt5를 이용하여 동영상 플레.. 2022.01.08
- PyQt5를 이용하여 동영상 플레이어를 만들어보자(3) 이전포스팅 https://tripleler.tistory.com/5?category=1015667 PyQt5를 이용하여 동영상 플레이어를 만들어보자(2) 프로그래밍에서 중요한 것은 쓰레딩이다. 쓰레딩을 간단히 설명하자면 일반적으로 파이썬 코드는 코드의 짜임 순서대로 처리한다. 따라서 동영상 플레이어같은 프로그램을 만들 때 쓰레드를 tripleler.tistory.com 무릇 동영상 플레이어라면 재생/정지가 가능하고 속도를 스스로 조절할 수 있어야 한다. 이번 포스팅에서는 이 두가지 핵심기능을 구현해 보고자 한다, 앞의 두 포스팅은 코드 복사를 허용해놨지만 이번 포스팅의 경우는 공부를 위해서라도 복사를 금지해뒀음을 참고할 것! 우선 코드부터 보자! import sys from PyQt5.QtWidgets .. 2022.01.08
- PyQt5를 이용하여 동영상 플레이어를 만들어보자(4) 이전 포스팅 https://tripleler.tistory.com/6 PyQt5를 이용하여 동영상 플레이어를 만들어보자(3) 이전포스팅 https://tripleler.tistory.com/5?category=1015667 PyQt5를 이용하여 동영상 플레이어를 만들어보자(2) 프로그래밍에서 중요한 것은 쓰레딩이다. 쓰레딩을 간단히 설명하자면 일반적으로 파이썬 코 tripleler.tistory.com 이제 마지막으로 동영상프레임 슬라이더 하나만 더 구현하면 어엿한 동영상 프로그램이 된다. 마지막인 만큼 코드도 많이 복잡하다. 우선 코드부터 공개한다. 이전포스팅과 마찬가지로 코드복사는 금지이다. import sys from PyQt5.QtWidgets import * from PyQt5.QtGui imp.. 2022.01.10