분류 전체보기
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()
OpecCV를 통해 차선 인식하기
위와 같이 사진을 사용하여 길 위의 차선을 인식할 것입니다. 사용함수! def canny_edge(image) : gray_conversion = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) blur_conversion = cv2.GaussianBlur(gray_conversion, (5,5), 0) canny_conversion = cv2.Canny(blur_conversion, 50, 150) return canny_conversion def reg_of_interest(image) : image_height = image.shape[0] polygons = np.array( [[ (200, image_height) , (1100, image_height), (550, 25..
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..
OpenCV 데이터 타입 변환입 변환
import cv2 import numpy as np source = cv2.imread("data/images/sample.jpg") scalingFactor = 1/255.0 # Convert unsigned int 8bit to float source = np.float32(source) source = source*scalingFactor print(source) # Convert back to unsigned int(8bit) source = source*(1.0/scalingFactor) source = np.uint8(source) print(source)
OpenCV 이미지 crop 하기
이미지의 크기를 변경시키고 크롭하는 코드입니다. 이미지 불러오기. import cv2 source = cv2.imread("data/images/sample.jpg", 1) 이미지의 크기를 줄이고 이미지 불러오기 scaleX = 0.6 scaleY = 0.6 #resizing 코드 scaleDown = cv2.resize(source, None, fx=scaleX, fy=scaleY, interpolation = cv2.INTER_LINEAR) cv2.imshow("Original", source) cv2.imshow("Scaled Down", scaleDown) 이미지의 크기를 키우고 이미지 불러오기 scaleX = 1.8 scaleY = 1.8 scaleUp = cv2.resize(source, No..
OpenCV 읽고 저장하고 표시하기
이미지 파일을 읽어오고, 흑백으로 변경한 뒤, 저장하는 코드입니다. import cv2 imageName = "data/images/sample.jpg" image = cv2.imread(imageName, cv2.IMREAD_COLOR) if image is None : print("Could not open or find the image") 이미지를 불러오고, 에러처리를 해줍니다. grayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 사진의 색을 그레이스케일로 변경합니다. cv2.namedWindow("gray image", cv2.WINDOW_AUTOSIZE) cv2.imshow("gray image", grayImage) 창의 이름과 성질을 설정하고, 창에..
OpenCV_numpy_array
OpenCV(Open Source Computer Vision)은 실시간 컴퓨터 비전을 목적으로 한 프로그래밍 라이브러리이다. 원래는 인텔이 개발하였고 실시간 이미지 프로세싱에 중점을 둔 라이브러리이다. 인텔 CPU에서 사용되는 경우 속도의 향상을 볼 수 있는 IPP(Intel Performance Primitives)를 지원한다. 이 라이브러리는 윈도, 리눅스 등에서 사용 가능한 크로스 플랫폼이며 오픈소스 BSD 허가서 하에서 무료로 사용할 수 있다. OpenCV는 TensorFlow , Torch / PyTorch 및 Caffe의 딥러닝 프레임워크를 지원한다. OpenCV를 사용하기 위해 install 해준다. pip install pip install opencv-python pip install ..
CNN을 활용하여 드론과 새 분류하기
앞선 글에서 구글 이미지 크롤링을 했다. durian9s-coding-tree.tistory.com/56 구글에서 파이썬 셀레니움을 통한 이미지 크롤링 3월 초부터 해결 방법을 알지 못해 손을 놓고 있던 이미지 크롤링을 몇 일 전부터 계속 구글링했다. 뭐가 문제인지 정말 많이 찾아봤었는데 범인은 코랩이었나보다.. 나는 정말 코랩이를 좋아했 durian9s-coding-tree.tistory.com 드론과 새의 이미지를 크롤링하여 저장했는데, 필요없는 사진은 제거하고 1:9의 비율로 트레이닝 셋과 테스트 셋으로 나누었다. CNN을 통한 드론/새 분류기를 만들어 보도록 하겠다. CNN의 설명을 내가 잘하면 좋겠는데.. 설명을 잘 못하니까 정말 정리가 잘되어있는 블로그를 첨부하겠다. taewan.kim/pos..
구글에서 파이썬 셀레니움을 통한 이미지 크롤링
3월 초부터 해결 방법을 알지 못해 손을 놓고 있던 이미지 크롤링을 몇 일 전부터 계속 구글링했다. 뭐가 문제인지 정말 많이 찾아봤었는데 범인은 코랩이었나보다.. 나는 정말 코랩이를 좋아했는데.. 편하고 인터넷으로 바로 켤 수 있고.. 근데 코랩이에서 크롬 드라이브 경로를 넣어도 인식을 못했다. 혹시나 해서 주피터 노트북에 넣고 돌려보니 바로 진행되었다. 내 사라진 시간들은 나의 멍청함이 먹어 치웠나보다 ㅎㅎ www.youtube.com/watch?v=1b7pXC1-IbE 조코딩님의 이미지 크롤링 자료를 2개 봤는데 다른 하나는 구글에서 막아놔서 사용이 불가능 했고, 셀레니움을 통한 크롤링은 사용이 가능했다. # 크롬 드라이브를 다운받아야한다. chromedriver.chromium.org/downloa..
SVM을 통해 구매 가능성이 있는 고객 분류하기
SVM을 통한 구매 가능성이 있는 고객 분류하기 이 포스팅은 앞선 K-NN을 통한 구매 가능성이 있는 고객 분류하기와 같은 자료를 사용하지만 다른 머신러닝을 통해 분류를 해 볼 것이다. import numpy as np import matplotlib.pyplot as plt import pandas as pd from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.metrics import confusion_matrix 라이브러리 import df = pd.read_csv('Social_Network_Ad..
공항 기상 시각화
어떤 자료를 이용해서 시각화 할 지 고민했는데, 전 직장에서 해외 공항 자료를 작성했을 때 해당 지역의 기상 자료를 활용했던 것이 생각이 났다. 공공데이터 포털에서 공항의 일별 기상자료를 다운받았다. www.data.go.kr/data/15052608/fileData.do 공공데이터 포털 국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase www.data.go.kr 시각화에 필요한 라이브러리와 matplotlib에 한글을 사용하기 위한 라이브러리 import. 이 또한 jupyter notebook을 사용해서 코딩했다. import pandas as pd impo..
인천 1호선 일자 및 시간대별 승하차 현황 시각화/prophet을 통한 승객 수요 예측
www.data.go.kr/data/15060369/fileData.do 공공데이터 포털 국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase www.data.go.kr 먼저, 공공 데이터 포털에서 자료를 다운로드 받는다. 자료는 인천 1호선 19년도 일별 승하차 현황이다. 라이브러리 임포트 import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline import seaborn as sns 오늘은 코랩이 아닌 아나콘다의 jupyter notebook에서 코딩을 했다...
K-NN을 통해 구매 가능성이 있는 고객 분류하기
라이브러리 import import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sb from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import confusion_matrix csv파일 불러오기 df = pd.read_csv('Social_Network_Ads.csv') df.head() 자료의 형태, 타입, NaN데이터 확인 df.info()..