warpPerspective 함수를 사용하여 퍼스펙티브 변환(Perspective Transformation)을 구현합니다. 퍼스펙티브 변환에서 원본 이미지의 모든 직선은 출력 이미지에서 직선으로 유지됩니다. 퍼스펙티브 변환 행렬을 찾으려면 입력 이미지의 4점과 대응하는 출력 이미지의 4점이 필요합니다. getPerspectiveTransform 함수를 사용하면 대응하는 4점 쌍에 대한 변환 행렬을 구할 수 있습니다. warpPerspective 함수를 사용하여 변환을 실행합니다. 마지막 업데이트 - 2018. 10. 4 다음 순서대로 책의 모서리를 클릭합니다. 클릭한 책 모서리에 빨간점이 찍히게 됩니다. 스페이스바를 누르면 정면에서 바라본 책의 이미지로 변환된 이미지가 보입니다. 테스트에 사용한 원본 ..
warpAffine 함수를 사용하여 아핀 변환(Affine Transformation)을 구현합니다. 아핀 변환에서 원본 이미지의 모든 평행선은 출력 이미지에서 여전히 평행합니다. 아핀 변환 행렬을 찾으려면 입력 이미지의 3점과 대응하는 출력 이미지의 3점이 필요합니다. getAffineTransform 함수를 사용하면 대응하는 3점 쌍에 대한 변환 행렬을 구할 수 있습니다. warpAffine함수를 사용하여 변환을 실행합니다. 마지막 업데이트 - 2018. 10. 5 왼쪽 위, 오른쪽 위, 왼쪽 아래 순으로 마우스로 클릭합니다. 클릭한 위치에 빨간점이 표시됩니다. 스페이스바를 클릭하면 오른쪽 위 점이 아래로 밀린 이미지가 보입니다. 다시 스페이스바를 클릭하면 왼쪽아래 점이 오른쪽으로 밀린 이미지가 보입..
warpAffine함수를 사용하여 이미지를 이동 및 회전하는 방법을 다루고 있습니다. 마지막 업데이트 - 2018. 10. 3 translation matrix를 사용하여 x축 방향 및 y축 방향으로 이미지를 이동시킵니다. rotation matrix를 사용하여 이미지를 회전시킵니다. OpenCV의 getRotationMatrix2D 함수는 배율 및 회전 중심 좌표가 추가된 rotation matrix를 사용합니다. 테스트에 사용한 전체 코드입니다. import numpy as np import cv2 # 원본 이미지 img_source = cv2.imread('cat.jpg') cv2.imshow("original", img_source) cv2.waitKey(0) # 이미지 이동 height, wid..
resize() 함수를 사용하여 이미지를 확대 및 축소하는 방법을 다루고 있습니다. 2018. 10. 3 최초 작성 2023. 2. 14 제목 변경 이미지 확대 또는 축소시 사용할 보간법(interpolation methods) 지정해줄 수 있습니다. 지정해주지 않았을 때 디폴트값은 cv2.INTER_LINEAR입니다. 이미지 확대할때에는 cv2.INTER_CUBIC 또는 cv2.INTER_LINEAR을 권장합니다. cv2.INTER_CUBIC을 사용하면 좀더 선명한 이미지를 얻을 수 있지만 처리속도가 상대적으로 느립니다. 동영상을 처리하거나 큰 이미지를 처리할 때에 체감이 될듯합니다. 이미지를 축소할때에는 cv.INTER_AREA를 권장합니다. 테스트에 사용한 전체 코드입니다. import cv2 # ..
OpenCV에서 cudacodec 사용하도록 빌드하는 방법을 다룹니다. 2022. 12. 18 최초작성 OpenCV를 빌드하는 하는 방법은 아래 포스트를 참고하세요. 본 포스트에서는 추가로 작업해야 하는 부분만 소개합니다. Ubuntu 22.04에 CUDA 사용하는 OpenCV 설치하는 방법 https://webnautes.tistory.com/1876 위 포스트대로 CUDA를 사용하도록 OpenCV를 빌드하려고 해도 디폴트로 cudacodec가 비활성화 되어있기 때문에 cudacodec 사용시 throw_no_cuda 에러가 발생합니다. 왜냐하면 필요한 nvcuvid 모듈을 사용하려면 NVIDIA Video Codec SDK가 필요하기 때문입니다. self.video = cv2.cudacodec.cre..
OpenCV Python에서 화질 손실을 최소화하여 이미지를 확대하기 위해 Super Resolution을 사용하는 방법을 소개하고 있습니다. 2022. 11. 5 최초작성 2022. 11. 6 최종작성 OpenCV에선 미리 학습된 Super Resolution 딥러닝 모델을 사용하여 이미지를 확대할 수 있는 방법을 제공합니다. 본 포스팅에서는 실제 사용하는 방법을 소개합니다. 1. 우선 contrib 모듈이 포함된 OpenCV를 설치해야 합니다. 기존에 opencv-python 패키지를 설치한적이 있다면 삭제하고 설치하세요. pip list 명령으로 설치된 패키지 목록을 확인할 수 있습니다. pip install opencv-contrib-python 2. 미리 학습되어 배포되고 있는 모델을 다운로드합..
Keras 모델( .h5)을 onnx로 변환한 후, OpenCV DNN에서 onnx 모델을 사용해서 추론을 해봅니다. 2022. 10. 25 최초작성 1. MNIST 데이터셋에 대한 모델을 학습시켜 h5 모델 파일로 저장합니다. 코드 출처 https://www.tensorflow.org/tutorials/quickstart/beginner?hl=ko import tensorflow as tf mnist = tf.keras.datasets.mnist (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 model = tf.keras.models.Sequential([ t..
Onvif Rtsp Server를 사용하여 동영상 파일을 RTSP 스트리밍하는 방법을 다루고 있습니다. 2022. 11. 17 최초작성 1. 아래 링크에서 Onvif Rtsp Server for Windows X64를 다운로드 합니다. https://www.happytimesoft.com/download.html 2. 압축을 풀은 후, 원하는 동영상 파일을 폴더에 복사해줍니다. 3. OnvifRtspServer.exe를 실행합니다. 명령 프롬프트 창이 뜨면서 다음처럼 사용 가능한 RTSP 주소를 보여줍니다. 여기에선 동영상 파일을 사용할 것이기 때문에 아래 표시된 주소를 다음처럼 수정해주면 됩니다. rtsp://192.168.25.16/ rtsp://admin:admin@192.168.25.16/1.mp..
OpenCV의 트랙바를 사용하여 Aspect Ratio를 시각화해봅니다. 트랙바는 실수를 지원하지 않기 때문에 변화되는 값을 배열에 저장한 후, 트랙바를 움직여 얻은 값을 배열의 인덱스로 사용했습니다. 2023. 10. 9 최초작성 실행결과입니다. aspect ratio가 1이면 정사각형이 되며, aspect ratio가 1보다 작으면 세로로 긴 사각형, aspect ratio가 1보다 크면 가로로 긴 사각형이 됩니다. 아래 이미지에서 왼쪽은 aspect ratio가 0.3인 경우이며, 중앙은 aspect ratio가 1.0인 경우이며 오른쪽은 aspect ratio가 2.0인 경우입니다. 전체 소스코드입니다. import cv2 import numpy as np def change_value(v): g..
이번 영상에서는 Keras와 OpenCV를 사용하여 직접 쓴 손글씨를 인식하는 방법을 소개합니다. 설명은 아래 유튜브 영상을 확인하세요. https://youtu.be/TV3oplqa5VA?feature=shared 영상에서 사용한 코드입니다. from tensorflow.keras.datasets import mnist from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Dropout, Flatten from tensorflow.keras.layers import Conv2D, MaxPooling2D from tensorflow.keras.utils import to_categorical fro..