OpenCV 파이썬 함수

OpenJR·2022년 4월 4일
0

OpenCV Python

기초

이미지 다루기

이미지 파일 읽기

src = cv2.imread("test.jpg", cv2.IMREAD_COLOR)

  • cv2.IMREAD_COLOR
  • cv2.IMREAD_GRAYSCALE
  • cv2.IMREAD_UNCHANGED

불러온 이미지 오류 확인

if src is None:
    print("Image load failed!")
    exit(1)

이미지 저장하기

cv2.imwrite('dst.jpg', src)

새창 띄우기

cv2.namedWindow("src")

영상 출력하기

cv2.imshow("src", src)

창 닫기

cv2.destroyAllWindows()

키보드 입력 대기:

if cv2.waitkey(2) == 27:
    break

이미지 변환

dst = cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)

  • cv2.COLOR_GRAY2BGR <-> cv2.COLOR_BGR2GRAY
  • cv2.COLOR_BGR2HSV <-> cv2.COLOR_HSV2BGR
  • cv2.COLOR_BGR2YCrCb <-> cv2.COLOR_YCrCb2BGR

동시에 여러창 띄우기

dst = cv2.hconcat([src, src_gray])
dst = cv2.vconcat([src, src_gray])

동영상 다루기

카메라 연결: cap = cv2.VideoCapture(0) or cap = cv2.VideoCapture("output.avi")

카메라 or 동영상 연결 확인

if cap.isOpened() == False:
    print("Camera open failed!")
    exit(1)

카메라에서 영상 불러오기: ret, frame = cap.read()

영상 불러오기 확인

if ret == False:
    print("Image load failed!")
    break

속성 얻어오기

width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
width = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = cap.get(cv2.CAP_PROP_FPS)

delay = round(1000 / fps)

카메라 연결 해제: cap.release()

영상 데이터 타입

src.dtype: unit8

src.shape:

  • 칼라: (cols, rows, 3)
  • 흑백: (cols, rows)

src.size:

  • 칼라: cols * rows * 3
  • 흑백: cols * rows

초기화

dst1 = src.copy()
dsr2 = np.zeros((height, width), np.uint8)

복사

얕은 복사

dst1 = src

dst2 = src[y : y + height + 1, x : x + width + 1]

깊은 복사

dst2 = cv2.copyTo(src, mask)

픽셀 값 참조

height, width = src.shape[:2]
for y in range(0, height):
    for x in range(0, width):
        b, g, r = src.item(y, x , 0), src.item(y, x , 1), src.item(y, x , 2)
        src.itemset(y, x, 0, 124)

채널 분리, 병합

planes = cv2.split(src)
dst = merge(planes)

유용한 기능

트랙바 다루기

def on_trackbar(x):
    pass
...

while cv2.waitKey(1) != 27:
    low = cv2.getTrackbarPos("low_threshold", "src")
    high = cv2.getTrackbarPos("high_threshold", "src")
    canny = cv2.Canny(src, low, high)
    cv2.imshow("src", canny)

다양한 그리기 함수

직선 그리기

cv2.lune(src, (x1, y1), (x2, y2), (0, 0, 255), 1)

사각형 그리기

cv2.rectangle(src, (x1, y1), (x2, y2), (0, 0, 255), 2)

cv2.rectangle(src, (x1, y1), (x2, y2), (0, 0, 255), -1)

cv2.rectangle(src, (x, y, width, height), (0, 0, 255), -2)

원그리기

cv2.circle(src, (x, y), radius, (0, 0, 255), 1)

다각형 그리기
pts = np.array([[x1, y1], [x2, y2], [x3, y3]], np.int32)
cv2.polylines(img, [pts], True,(0, 0, 255), 2)
cv2.fillPoly(img, [pts], (0, 0, 255))
글자 출력

cv2.putText(src, text, (30, 30), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 0, 255), 2)

시간 측정

tm = cv2.TickMeter()
tm.start()
tm.stop()
ms = tm.getTimeMilli()

마스크 & ROI

cv2.copyTo(src, mask, dst)
roi = src[y : y + height, x : x + width]

mask = np.zeros((height, width), np.uint8)
cv2.fillPoly(mask, [pts], (255))
dst = cv2.copyTo(src, mask)

차선 인식 함수들

가우시간 블러함수

blur1 = cv2.GaussianBlur(src, (3, 3), 0)
blur2 = cv2.GaussianBlur(src, (5, 5), 0)

캐니 에지 함수

canny = cv2.Canny(np.uint8(blur), low_threshold, high_threshold)
canny = cv2.Canny(blur, low_threshold, high_threshold)

색깔 영역 추출

hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
low = np.array([0, 0, 70])
high = np.array([131, 255, 255]) # np.array([131, 255, 255], dtype=np.uint8)

mask = cv2.inRange(hsv, low, high)
profile
Jacob

0개의 댓글