OpenCV

    Semantic Segmentation_video

    import numpy as np import pandas as pd import imutils import time import cv2 import os import matplotlib.pyplot as plt DEFAULT_FRAME = 1 SET_WIDTH = int(600) sv = cv2.VideoCapture('data4/video/video.mp4') try : prop = cv2.cv.CV_CAP_PROP_FRAME_COUNT if imutils.is_cv2() else cv2.CAP_PROP_FRAME_COUNT total = sv.get(prop) # print("[INFO] {} total frames in video.".format(total)) except : # print("[I..

    road_marking_detection

    import cv2 import numpy as np import matplotlib.image as mpimg import matplotlib.pyplot as plt # 칼라이미지. image_color = cv2.imread('data2/image.jpg') # cv2.imshow("ori",image_color) # 우리가 필요한건 그레이 스케일 image_gray = cv2.cvtColor(image_color, cv2.COLOR_BGR2GRAY) # cv2.imshow("gray", image_gray) image_copy = image_gray.copy() # 값이 195 미만인 것들은, 0으로 셋팅. # print(image_color.shape) # print(image_copy.shap..

    find contures

    import cv2 import numpy as np import random #허프 트렌스폼 threshold = 0 maxThreshold = 255 * 3 random.seed(12345) def callback(): # 캐니 에지로, 에지 검출하고, imCanny = cv2.Canny(img, threshold, threshold*2, apertureSize=3) # 컨투어스 연결시킨다. 에지를 연결시킴 contours, heirarchy = cv2.findContours(imCanny, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 연결시켜서 그린다. display = np.zeros( (imCanny.shape[0], imCanny.shape[1]) ) for i ..

    Canny

    import cv2 import numpy as np #캐니 커널은 그레이스케일로 엣지를 효율성 때문에 판단한다. img = cv2.imread('data/images/sample.jpg',0) cv2.imshow('img',img) #threshold값에 따라 결과가 달라진다. threshold_1 = 130 #high : 0~255중에 설정 threshold_1 = 100 #low result =cv2.Canny(img, threshold_1,threshold_1) cv2.imshow('result', result) cv2.waitKey(0) cv2.destroyAllWindows() import cv2 import numpy as np highThreshold = 100 lowThreshold = ..

    sharpen

    import cv2 import numpy as np img = cv2.imread('data/images/mountain.jpeg',1) sharpen = np.array( [ [0,-1,0], [-1,5,-1], [0,-1,0] ] , dtype = 'int' ) result=cv2.filter2D(img,-1,sharpen) cv2.imshow('ori',img) cv2.imshow('sharp',result) cv2.waitKey(0) cv2.destroyAllWindows()

    laplacian

    import cv2 import numpy as np #이미지를 부드럽게~ img = cv2.imread('data/images/truth.png',1) laplacian = cv2.Laplacian(img, cv2.CV_32F, ksize = 3, scale=1) cv2.imshow('ori', img) cv2.imshow('Laplacian', laplacian) cv2.waitKey(0) cv2.destroyAllWindows()

    sobel

    import cv2 import numpy as np #이미지를 부드럽게~ img = cv2.imread('data/images/truth.png') #가로선의 edge를 나타냄 sobelX = cv2.Sobel(img, cv2.CV_32F,1,0) #세로선의 edge를 나타냄 sobelY = cv2.Sobel(img, cv2.CV_32F,0,1) cv2.imshow('ori', img) cv2.imshow('sobelX', sobelX) cv2.imshow('sobelY', sobelY) cv2.waitKey(0) cv2.destroyAllWindows()

    bilateral Filter

    import cv2 import numpy as np #이미지를 부드럽게~ img = cv2.imread('data\images\gaussian-noise.png') result = cv2.bilateralFilter(img, 15, 80,80) combined = np.hstack([img,result]) cv2.imshow('comb', combined) cv2.waitKey(0) cv2.destroyAllWindows()

    Median Blur

    import cv2 import numpy as np #이미지를 부드럽게~ img = cv2.imread('data\images\gaussian-noise.png') #blur는 컨볼루션까지 다해줘 #3x3커널 사용 des1 = cv2.medianBlur(img, 5) dst2 = cv2.medianBlur(img, 25) combined = np.hstack([img,des1,dst2]) cv2.imshow('comb', combined) cv2.waitKey(0) cv2.destroyAllWindows()

    gaussianBlur

    import cv2 import numpy as np #이미지를 부드럽게~ img = cv2.imread('data\images\gaussian-noise.png') #blur는 컨볼루션까지 다해줘 #3x3커널 사용 des1 = cv2.GaussianBlur(img, (3,3),1) dst2 = cv2.GaussianBlur(img, (25,25),50) combined = np.hstack([img,des1,dst2]) cv2.imshow('comb', combined) cv2.waitKey(0) cv2.destroyAllWindows()

    boxfilter

    import cv2 import numpy as np #이미지를 부드럽게~ img = cv2.imread('data\images\gaussian-noise.png') #blur는 컨볼루션까지 다해줘 #3x3커널 사용 des1 = cv2.blur(img, (3,3)) #7x7 커널 사용 dst2 = cv2.blur(img, (7,7)) combined = np.hstack([img,des1,dst2]) cv2.imshow('comb', combined) cv2.waitKey(0) cv2.destroyAllWindows()

    convolution

    import cv2 import numpy as np img = cv2.imread('data\images\gaussian-noise.png') kernel_size = 3 kernel = np.ones((kernel_size,kernel_size)) #컨볼루션 시행 cv2.filter2D함수 result = cv2.filter2D(img,-1,kernel) cv2.imshow('img',img) cv2.imshow('result',result) cv2.waitKey(0) cv2.destroyAllWindows()

    warming/cooling

    warming import cv2 import numpy as np original = cv2.imread('data/images/girl.jpg') img = original.copy() #X축 피벗포인트 originalValue = np.array([0, 50,100,150,200,255]) #Y축 포인트 : 빨간쪽, 파란쪽 두 부분의 포인트/ opencv 51번 사진 참고 rCurve = np.array([0,80,150,190,220,255]) bCurve = np.array([0,20,40,75,150,255]) #Lookup Table 만들기 : 6개의 점으로 256개의 점 만들기 fullRange = np.arange(0,255+1) rLUT = np.interp(fullRange, orig..

    gamma

    import cv2 import numpy as np img = cv2.imread('data/images/candle.jpg') gamma = 0.5 fullRange = np.arange(0,256) lookupTable = np.uint8(255*np.power((fullRange/255.0),gamma)) #lookuptable의 약자 output = cv2.LUT(img, lookupTable) combined = np.hstack([img, output]) cv2.imshow('comb', combined) cv2.waitKey(0) cv2.destroyAllWindows()

    contrast HistEq

    import cv2 import numpy as np img = cv2.imread('data/images/candle.jpg') ycbImage = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb) Ychannel, Cr,Cb =cv2.split(ycbImage) Ychannel = cv2.equalizeHist(Ychannel) ycbImage = cv2.merge([Ychannel,Cr,Cb]) ycbImage = cv2.cvtColor(ycbImage, cv2.COLOR_YCrCb2BGR) combined = np.hstack([img, ycbImage]) cv2.imshow('comb', combined) cv2.waitKey(0) cv2.destroyAllWindows()

    contrast Scaling 대비

    import cv2 import numpy as np img = cv2.imread('data/images/candle.jpg') scaleFactor = 2.5 ycbImage = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb) ycbImage = ycbImage.astype('float') Ychannel, Cr,Cb =cv2.split(ycbImage) Ychannel = np.clip(Ychannel*scaleFactor,0,255) ycbImage = cv2.merge([Ychannel,Cr,Cb]) ycbImage = np.uint8(ycbImage) ycbImage = cv2.cvtColor(ycbImage, cv2.COLOR_YCrCb2BGR) combined = np..

    brightness 밝기 조절

    import cv2 import numpy as np img = cv2.imread('data/images/candle.jpg',1) beta = 100 #숫자가 높을수록 밝아짐 #컬러스페이스 변경 ycbImage = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb) #가공을 위해 uint8을 float으로 변경 ycbImage = np.float32(ycbImage) #채널 분리 Ychannel, Cr,Cb = cv2.split(ycbImage) #밝기 조절 Ychannel = np.clip(Ychannel+beta, 0,255) #합치기 ycbImage = cv2.merge([Ychannel, Cr, Cb]) #정수로 변환 ycbImage = np.uint8(ycbImage) #B..

    Color Transfer 필터 입히기

    import cv2 import numpy as np src = cv2.imread('data/images/image1.jpg') dst = cv2.imread('data/images/image2.jpg') cv2.imshow('src', src) cv2.imshow('dst',dst) output = dst.copy() #lab로 변환 srcLab = cv2.cvtColor(src, cv2.COLOR_BGR2LAB) dstLab = cv2.cvtColor(dst,cv2.COLOR_BGR2LAB) outputLab = cv2.cvtColor(output,cv2.COLOR_BGR2LAB) srcLab = srcLab.astype('float') dstLab = dstLab.astype('float') ou..

    desaturation

    import cv2 import numpy as np img = cv2.imread("data/images/capsicum.jpg", 1) cv2.imshow('Original', img) #채도 saturationScale = 0.01 hsvImage = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) hsvImage = np.float32(hsvImage) #채널로 분리하는 함수 H,S,V = cv2.split(hsvImage) #유용한 함수. cv2.clip함수를 이용하여 0보다 작으면 0으로, #255보다 크면 255로 맞추도록 할 수 있다. S = np.clip(S*saturationScale, 0,255) #나눈 채널을 하나로 합치는 함수 hsvImage = cv2.merge..

    hueHistogram

    import cv2 import numpy as np # from utils import get_four_points img = cv2.imread("data/images/sample.jpg", 1) gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) print(hsv_img) #hue hsv_img[2]=hsv_img[2]-100 bgr_img = cv2.cvtColor(hsv_img, cv2.COLOR_HSV2BGR) cv2.imshow('color',img) cv2.imshow('gray',gray_img) cv2.imshow('hsv',hsv_img) cv2.imshow('bgr..

    virtual Bilbord(빌보드 전광판 사진 바꾸기)

    import cv2 import numpy as np from utils import get_four_points img_src = cv2.imread("data/images/first-image.jpg", 1) img_dst = cv2.imread("data/images/times-square.jpg", 1) dst_size = img_dst.shape # 가져올 사이즈는 img_dst 이미지 크기로 할거다. # img_dst = np.zeros(dst_size, np.uint8) # 월본 이미지로부터 4개의 점 바로 가져올 수 있다. cv2.imshow("Image", img_src) points_src = np.array([0,0, img_src.shape[1],0, img_src.shape[1],..

    perspective Correction(클릭해서 이미지 추출)

    import cv2 import numpy as np from utils import get_four_points img_src = cv2.imread('data/images/book1.jpg') #사이즈가 있고 첫 좌표(0,0)이 있다면 점만 찍어줘도 #이미지의 크기를 다 알 수 있다. dst_size = (400,300,3) img_dst = np.zeros(dst_size, np.uint8) cv2.imshow('DST', img_dst) #원본이미지로 부터 마우스 클릭으로 4개의 점을 가져온다. cv2.imshow('Image', img_src) points_src = get_four_points(img_src) #새로 만들 이미지에서는 위의 원본 이미지 4개 점과 맵핑할 점을 잡아줘야 함. po..

    homography_book

    import cv2 import numpy as np #사진 돌리기 #이미지 임포트 is_src = cv2.imread('data/images/book2.jpg') #좌표를 하드코딩으로 설정해준다. point_src = np.array( [141,131,480,159,493,630,64,601], dtype=float) #행렬로 변경 point_src = point_src.reshape(4,2) print(point_src) #바꿔줄 이미지 사진 img_dst = cv2.imread('data/images/book1.jpg') #바꿔줄 이미지 사진의 좌표값과 행렬처리 point_dst = np.array( [318,256,534,372,316,670,73,473], dtype=float ) point_d..

    rotate / warpAffine/ getAffine 이미지 돌리기

    import cv2 source = cv2.imread('data/images/sample.jpg', 1) # 회전의 중심좌표 center = (source.shape[1]/2, source.shape[0]/2) rotationAngel = 15 scaleFactor = 1 rotationMatrix = cv2.getRotationMatrix2D(center, rotationAngel, scaleFactor) print(rotationMatrix) result = cv2.warpAffine(source, rotationMatrix, (source.shape[1], source.shape[0]) ) cv2.imshow('Original', source) cv2.imshow('Rotated Image', r..

    opening, closing

    import cv2 imageName = 'data/images/opening.png' image = cv2.imread(imageName,0) cv2.imshow('original',image) openingSize = 3 element = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (2*openingSize+1, 2*openingSize+1)) imageOpend = cv2.morphologyEx(image, cv2.MORPH_OPEN, element, iterations=3) cv2.imshow('opend', imageOpend) cv2.waitKey(0) cv2.destroyALLWindow() import cv2 imageName = 'data/images..

    erode 이미지 침식

    import cv2 #이미지 표면을 0침식을 시킴 imageName = 'data/images/truth.png' image = cv2.imread(imageName, cv2.IMREAD_COLOR) dilationSize = 5 #얼마나 깎을 것인가? element = cv2.getStructuringElement(cv2.MORPH_RECT, (2*dilationSize+1, 2*dilationSize+1)) # (dilationSize,dilationSize)) imageEroded = cv2.erode(image, element) cv2.imshow('original', image) cv2.imshow('Eroded', imageEroded) cv2.waitKey(0) cv2.destroyALLWi..

    dilate 이미지 확장

    import cv2 #거친 사진을 매끄럽게 만들어주기 위함 imageName = 'data/images/truth.png' image = cv2.imread(imageName, cv2.IMREAD_COLOR) cv2.imshow('original', image) #이미지 확장 dilation dilationSize = 6 element = cv2.getStructuringElement(cv2.MORPH_RECT, (2*dilationSize+1, 2*dilationSize+1)) # (dilationSize,dilationSize)) imageDilate = cv2.dilate(image, element) cv2.imshow('Dilation', imageDilate) cv2.waitKey(0) cv2...

    Threshold 흐린걸 진하게

    import cv2 import numpy as np src = cv2.imread('data/images/threshold.png',0) #구분을 위한 값 설정 thresh = 0 #배경이 까만색 #위에서 설정한 값보다 큰 것들은 모두 255로 설정하겠다. max_value =255 cv2.imshow('original', src) #두번째 리턴값이 적용된 이미지다.(numpy) th, dst = cv2.threshold(src, thresh, max_value, cv2.THRESH_BINARY) cv2.imshow('Thresholded Image', dst) cv2.waitKey(0) cv2.destroyALLWindow()

    OpenCV 2 Video read/write

    Video Read import cv2 import numpy as np #FPS = Frame Per Second : 초당 사진 구성 cap = cv2.VideoCapture('data/videos/chaplin.mp4') if cap.isOpened() == False: print('Error opening video stream or file') else: #반복문이 필요한 이유? 비디오는 여러 사진으로 구성되어있음. while cap.isOpened(): #사진을 1장씩 가져와서 ret, frame = cap.read() #제대로 가져왔으면 화면 표시. if ret == True: cv2.imshow("Frame", frame) #키보드에서 esc를 누르면 exit하라 if cv2.waitKey(..

    OpenCV 이미지에 도형 그리기

    라이브러리 임포트 및 사진 꺼내기 import cv2 import numpy as np image = cv2.imread('data/images/mark.jpg') cv2.imshow("img", image) 눈 위에 선을 그어줄겁니다. imageLine = image.copy() cv2.line(imageLine, (322,179), (400,183), (0,0,255), thickness=2, lineType=cv2.LINE_AA) #선 시작, 끝(좌표), 색, 굵기, 선 표현 법 cv2.imshow("image Line", imageLine) 원그리기! imageCircle = image.copy() cv2.circle(imageCircle, (350,200), 150, (255,0,0), thic..