이미지 위에 임의의 4점을 선택하면 그 구역 내 이미지를 원근 변환하는 코드를 작성해보았다. homograpyTransformation 함수를 통해 4점을 입력받으면 calPoint 함수로 상하좌우를 지정해주기 때문에 전처럼 "좌상 → 좌하 → 우상 → 우하" 순으로 점을 찍지 않아도 되며, 변형 후 각 점의 좌표와 원근 변환한 이미지 크기도 같이 계산해준다. img = cv2.imread('athletic-field-1867053_1920.jpg') count = 0 blue, green, red, yellow = (255, 0, 0), (0, 255, 0), (0, 0, 255), (0, 255, 255) point_array = [] def calPoint(ary): total = np.sum(ar..
Computer Vision 검색 결과
import numpy as np import cv2 import matplotlib.pyplot as plt 2D 이미지 기하학적 변형 (Transformation) → 행렬 변환 1. 강체변환 (Ridid-Body) : 크기와 형태를 유지한 채 위치와 방향을 바꾸는 변환 (ex. 위치변경(Translation), 회전(Rotation)) 2. 유사변환 (Similarity) : 강체변환에 크기의 변환도 허용 (ex. 크기변경(Scaling)) 3. 선형변환 (Linear) : Vector 공간에서의 이동. (회전, 크기변경 및 반전, 밀림도 가능하지만 위치변경은 못한다.) 4. Affine : 선형변환과 이동변환까지 포함. 선의 수평성은 유지 5. Perspective : Affine 변환에서 수평성..
import numpy as np import cv2 import matplotlib.pyplot as plt 2D 이미지 기하학적 변형 (Transformation) → 행렬변환 1. 강체변환 (Ridid-Body) : 크기와 형태를 유지한 채 위치와 방향을 바꾸는 변환 (ex. 위치변경(Translation), 회전(Rotation)) 2. 유사변환 (Similarity) : 강체변환에 크기의 변환도 허용 (ex. 크기변경(Scaling)) 3. 선형변환 (Linear) : Vector 공간에서의 이동. (회전, 크기변경 및 반전, 밀림도 가능하지만 위치변경은 못한다.) 4. Affine : 선형변환과 이동변환까지 포함. 선의 수평성은 유지 5. Perspective : Affine 변환에서 수평성이..
import cv2 import numpy as np import matplotlib.pyplot as plt 전역 임계처리 (Global Thresholding) 하나의 이미지에 전역으로 적용될 하나의 문턱값을 이용해 thresholding 기능을 제공하는 함수가 있다. cv2.threshold(src, thresh, maxval, type [, dst]) → retval, dst threshold 함수는 멀티 채널 배열의 thresholding을 픽셀단위로 적용한다. 즉 컬러 이미지에도 사용할 수 있으나, 주로 Grayscale 이미지에서 바이너리 이미지를 얻기 위해 사용하거나 픽셀 값 중 너무 크거나 작은 값들을 필터링하여 노이즈를 제거하기 위해 사용한다. 1. src : threshold에 적용할..
import cv2 import numpy as np Digital Image 디지털 이미지는 2차원 행렬의 형태로 표현이 된다. 행과 열로 이루어진 격자를 pixel라고 하며, pixel로 이루어진 이미지를 bitmap image라고 한다. 각 pixel의 위치는 영상좌표와 행렬 위치, 2가지로 표현할 수 있다. 좌상단 꼭짓점을 중심으로 영상좌표는 (y, x)로 표현하고, 행렬위치는 (row, column)로 표현한다. OpenCV 에서는 영상좌표와 행렬 위치, 2가지 형태가 사용되기 때문에 유의해야 한다. Binary Image Binary Image 는 픽셀당 1bit로 표현하는 이미지를 의미한다. 오직 흰색(1)과 검은색(0)으로만 표현이 된다. Binary Image를 만드는 방법에는 두 가지가..
이미지 비트연산 이미지는 AND, NOT, OR, XOR 의 비트연산이 가능하다. 이미지 비트연산은 이미지에서 특정 영역을 추출하거나 직사각형 모양이 아닌 ROI를 정의할 때, 이미지에서 바탕을 제거하고 2개의 이미지를 합칠 때에 유용하게 사용할 수 있다. 이때, 중요한 것은 비트 연산할 이미지의 크기가 동일해야 한다는 것이다. def bitOperation_black_bg(hpos, vpos): img1 = cv2.imread('iceland-1979445_1280.jpg') img2 = cv2.imread('opencv_logo.png') rows, cols, channels = img2.shape roi = img1[ vpos:vpos + rows, hpos:hpos + cols ] img2gray..
import matplotlib.pyplot as plt import numpy as np import cv2 def bgr_to_rgb(imgfile): b, g, r = cv2.split(imgfile) imgfile = cv2.merge([r, g, b]) return imgfile 이미지 더하기 두개의 이미지를 더하는 데는 2가지 방법이 있다. 하나는 + operator를 사용하여 연산하는 방법과 다른 하나는 opencv의 add함수를 사용하는 것이다. 두 방법 모두 서로 다른 이미지를 더하지만 더하는 방식에는 그 차이가 있다. img1 + img2 우리가 opencv의 imread 함수로 이미지를 불러들였을 때, 그 이미지가 numpy array의 형식을 가지고 있으므로 img1과 img2를 더..
import cv2 import numpy as np 이미지 속성 1. img.shape : 이미지 해상도 및 채널 수 (height, width, channel), (행, 열, 채널) 2. img.size : 이미지 크기 (byte 단위) 3. img.dtype : 이미지 데이터 타입 img = cv2.imread('bald-eagle-5463386_1280.jpg') print(img.shape) print(img.size) print(img.dtype) cv2.imshow('Show Image', img) cv2.waitKey(0) cv2.destroyAllWindows() 이미지 픽셀 값 얻고 수정해보기 한 장의 이미지는 지정된 크기의 BGR 값들의 배열로 이루어져 있다. 예를들어 10 * 10 ..
import cv2 import numpy as np 트랙바 만들기 cv2.createTrackbar(trackbarName, windowName, value, count, onChange) cv2.createTrackbar('B', 'color_palette', 0, 255, onChange) 이 함수는 트랙바를 지정된 윈도우에 생성하는 함수이다. 1. trackbarName : 트랙바 이름 2. windowName : 윈도우 이름 3. value : 트랙바 시작 값 4. count : 트랙바 끝 값 5. onChange : 트랙바 이벤트 발생시 수행되는 TrackbarCallback 콜백함수 TrackbarCallback :: def onChange(x) createTrackbar 함수에서 마지막 인..
import cv2 import numpy as np import math from random import shuffle 도형그리기 캔버스 만들기 img = np.full((512, 512, 3), 255, np.uint8) 도형을 그리기 위한 공간을 생성한다. 위 코드는 (512, 512, 3)의 크기에 255라는 값으로 채워진 numpy array를 생성하는 코드이다. 데이터 타입은 uint8(0~255의 정수)이다. 여기서 배열을 채우는 값이 단일 상수로 되어있으면 흑백의 binary 값으로 인식하여 0이면 검은색, 255이면 흰색으로 채워지게 되고, (0, 0, 255)처럼 3개의 요소를 가진 벡터로 되어있으면 BGR 값으로 인식하여 해당 색으로 값이 채워지게 된다. cv2.line(img, p..
최근댓글