■ 비디오 카메라 캡처 영상의 색상 모드를 변경하는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
import cv2 videoCapture = cv2.VideoCapture(0) while(videoCapture.isOpened()): _, frameNDArray = videoCapture.read() grayscaleFrameNDArray = cv2.cvtColor(frameNDArray, cv2.COLOR_BGR2GRAY) cv2.imshow("grayscale video", grayscaleFrameNDArray) cv2.imshow("original video", frameNDArray) if cv2.waitKey(1) & 0xFF == ord("q"): break videoCapture.release() cv2.destroyAllWindows() |
■ 비디오 카메라 캡처 영상을 저장하는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
import cv2 videoCapture = cv2.VideoCapture(0) _, frameNDArray = videoCapture.read() videoHeight, videoWidth = frameNDArray.shape[:2] fourcc = cv2.VideoWriter_fourcc(*"DIVX") videoWriter = cv2.VideoWriter("result.avi", fourcc, 25.0, (videoWidth, videoHeight)) while(videoCapture.isOpened()): _, frameNDArray = videoCapture.read() videoWriter.write(frameNDArray) cv2.imshow("video", frameNDArray) if cv2.waitKey(1) & 0xFF == ord("q"): break videoCapture.release() videoWriter.release() cv2.destroyAllWindows() |
■ VideoCapture 클래스를 사용해 동영상 파일을 재생하는 방법을 보여준다. ▶ 예제 코드 (PY)
|
import cv2 videoCapture = cv2.VideoCapture("video.mp4") while(videoCapture.isOpened()): result, frameNDArray = videoCapture.read() cv2.imshow("video", frameNDArray) if cv2.waitKey(1) & 0xFF == ord("q"): break videoCapture.release() cv2.destroyAllWindows() |
■ VideoCapture 클래스의 set 함수를 사용해 동영상 파일 재생 위치를 설정하는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
import cv2 videoCapture = cv2.VideoCapture("video.mp4") videoCapture.set(cv2.CAP_PROP_POS_FRAMES, 1800) while(videoCapture.isOpened()): result, frameNDArray = videoCapture.read() cv2.imshow("video", frameNDArray) if cv2.waitKey(1) & 0xFF == ord("q"): break videoCapture.release() cv2.destroyAllWindows() |
■ VideoCapture 클래스를 사용해 비디오 카메라를 캡처하는 방법을 보여준다. ▶ 예제 코드 (PY)
|
import cv2 videoCapture = cv2.VideoCapture(0) while(videoCapture.isOpened()): result, frameNDArray = videoCapture.read() cv2.imshow("video", frameNDArray) if cv2.waitKey(1) & 0xFF == ord("q"): break videoCapture.release() cv2.destroyAllWindows() |
■ CascadeClassifier 클래스의 detectMultiScale 메소드를 사용해 Haar 직렬형 분류기를 만드는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
import cv2 faceCascadeClassifier = cv2.CascadeClassifier("haarcascade_frontalface_default.xml") eyeCascadeClassifier = cv2.CascadeClassifier("haarcascade_eye.xml") imageNDArray = cv2.imread("source.jpg") grayscaleImageNDArray = cv2.cvtColor(imageNDArray, cv2.COLOR_BGR2GRAY) faceNDArray = faceCascadeClassifier.detectMultiScale(grayscaleImageNDArray, 1.3, 5) for (faceX, faceY, faceWidth, faceHeight) in faceNDArray: left = faceX top = faceY right = faceX + faceWidth bottom = faceY + faceHeight cv2.rectangle(imageNDArray, (left, top), (right, bottom), (255, 0, 0), 2) faceImageNDArray = imageNDArray[top:bottom, left:right] faceGrayscaleImageNDArray = grayscaleImageNDArray[top:bottom, left:right] eyeNDArray = eyeCascadeClassifier.detectMultiScale(faceGrayscaleImageNDArray) for(eyeX, eyeY, eyeWidth, eyeHeight) in eyeNDArray: cv2.rectangle(faceImageNDArray, (eyeX, eyeY), (eyeX + eyeWidth, eyeY + eyeHeight), (0, 255, 0), 2) cv2.imwrite("target.jpg", imageNDArray) cv2.imshow("image", imageNDArray) cv2.waitKey(0) cv2.destroyAllWindows() |
data.zip
■ matchTemplate 함수를 사용해 템플리트 이미지를 찾는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
import cv2 imageNDArray = cv2.imread("source.jpg") grayscaleImageNDArray = cv2.cvtColor(imageNDArray, cv2.COLOR_BGR2GRAY) templateImageNDArray = cv2.imread("template.jpg") grayscaleTemplateImageNDArray = cv2.cvtColor(templateImageNDArray, cv2.COLOR_BGR2GRAY) imageWidth, imageHeight = grayscaleTemplateImageNDArray.shape[::-1] outputNDArray = cv2.matchTemplate(grayscaleImageNDArray, grayscaleTemplateImageNDArray, cv2.TM_CCOEFF_NORMED) minimumValue, maximumValue, minimumLocation, maximumLocation = cv2.minMaxLoc(outputNDArray) leftTopLocation = maximumLocation rightBottomLocation = (leftTopLocation[0] + imageWidth, leftTopLocation[1] + imageHeight) cv2.rectangle(imageNDArray, leftTopLocation, rightBottomLocation, 255, 2) cv2.imshow("image", imageNDArray) cv2.imwrite("target.jpg", imageNDArray) cv2.waitKey(0) cv2.destroyAllWindows() |
source.jpg template.jpg
■ findContours 함수를 사용해 외곽선을 검출하는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
import cv2 imageNDArray = cv2.imread("source.jpg", cv2.IMREAD_COLOR) grayscaleImageNDArray = cv2.cvtColor(imageNDArray, cv2.COLOR_RGB2GRAY) ret, binary = cv2.threshold(grayscaleImageNDArray, 127, 255, cv2.THRESH_BINARY) binary = cv2.bitwise_not(binary) contourList, hierarchyNDArray = cv2.findContours(binary, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_NONE) for i in range(len(contourList)): cv2.drawContours(imageNDArray, [contourList[i]], 0, (255, 0, 0), 2) #cv2.putText(imageNDArray, str(i), tuple(contourList[i][0][0]), cv2.FONT_HERSHEY_COMPLEX, 0.8, (0, 255, 0), 1) #print(i, hierarchyNDArray[0][i]) cv2.imshow("src", imageNDArray) cv2.waitKey(0) cv2.destroyAllWindows() |
■ Canny 함수를 사용해 캐니 에지를 검출하는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
import cv2 imageNDArray = cv2.imread("source.jpg") grayscaleImageNDArray = cv2.cvtColor(imageNDArray, cv2.COLOR_BGR2GRAY) cannyImageNDArray = cv2.Canny(grayscaleImageNDArray, 100, 200, 3) cv2.imwrite("target.jpg", cannyImageNDArray) cv2.imshow("canny edge image", cannyImageNDArray) cv2.waitKey(0) cv2.destroyAllWindows() |
■ Sobel 함수를 사용해 소벨 에지를 검출하는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
import cv2 imageNDArray = cv2.imread("source.jpg") grayscaleImageNDArray = cv2.cvtColor(imageNDArray, cv2.COLOR_BGR2GRAY) xEdgeNDArray = cv2.Sobel(grayscaleImageNDArray, -1, 1, 0, ksize = 5) cv2.imwrite("target1.jpg", xEdgeNDArray) yEdgeNDArray = cv2.Sobel(grayscaleImageNDArray, -1, 0, 1, ksize = 5) cv2.imwrite("target2.jpg", yEdgeNDArray) cv2.imshow("x edge image", xEdgeNDArray) cv2.imshow("y edge image", yEdgeNDArray) cv2.waitKey(0) cv2.destroyAllWindows() |
source.jpg
■ dilate 함수를 사용해 이미지 팽창(dilation)을 만드는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
import cv2 import numpy as np imageNDArray = cv2.imread("source.jpg") kernelNDArray = np.ones((5, 5), np.uint8) dilationImageNDArray = cv2.dilate(imageNDArray, kernelNDArray, iterations = 1) cv2.imwrite("target.jpg", dilationImageNDArray) cv2.imshow("dilation image", dilationImageNDArray) cv2.waitKey(0) cv2.destroyAllWindows() |
source.jpg
■ erode 함수를 사용해 이미지 침식(erosion)을 만드는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
import cv2 import numpy as np imageNDArray = cv2.imread("source.jpg") kernelNDArray = np.ones((5, 5), np.uint8) erosionImageNDArray = cv2.erode(imageNDArray, kernelNDArray, iterations = 1) cv2.imwrite("target.jpg", erosionImageNDArray) cv2.imshow("erosion image", erosionImageNDArray) cv2.waitKey(0) cv2.destroyAllWindows() |
source.jpg
■ medianBlur 함수를 사용해 중간값 블러를 만드는 방법을 보여준다. ▶ 예제 코드 (PY)
|
import cv2 imageNDArray = cv2.imread("source.jpg") blurImageNDArray = cv2.medianBlur(imageNDArray, 5) cv2.imwrite("target.jpg", blurImageNDArray) cv2.imshow("median blue image", blurImageNDArray) cv2.waitKey(0) cv2.destroyAllWindows() |
source.jpg
■ GaussianBlur 함수를 사용해 가우시안 블러를 만드는 방법을 보여준다. ▶ 예제 코드 (PY)
|
import cv2 imageNDArray = cv2.imread("source.jpg") blurImageNDArray = cv2.GaussianBlur(imageNDArray, (5, 5), 0) cv2.imwrite("target.jpg", blurImageNDArray) cv2.imshow("gaussian blur image", blurImageNDArray) cv2.waitKey(0) cv2.destroyAllWindows() |
source.jpg
■ filter2D 함수를 사용해 이미지 필터를 처리하는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
import cv2 import numpy as np imageNDArray = cv2.imread("source.jpg") kernelNDArray = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]]) filterImageNDArray = cv2.filter2D(imageNDArray, -1, kernelNDArray) cv2.imwrite("target.jpg", filterImageNDArray) cv2.imshow("filter image", filterImageNDArray) cv2.waitKey(0) cv2.destroyAllWindows() |
source.jpg
■ threshold 함수를 사용해 이미지 임계값을 처리하는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
import cv2 imageNDArray = cv2.imread("source.jpg") grayscaleImageNDArray = cv2.cvtColor(imageNDArray, cv2.COLOR_BGR2GRAY) thresholdTuple = cv2.threshold(grayscaleImageNDArray, 120, 255, cv2.THRESH_BINARY) cv2.imwrite("target.jpg", thresholdTuple[1]) cv2.imshow("threshold image", thresholdTuple[1]) cv2.waitKey(0) cv2.destroyAllWindows() |
source.jpg
■ getRotationMatrix2D 함수를 사용해 이미지를 회전하는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
import cv2 import numpy as np imageNDArray = cv2.imread("source.jpg") imageHeight, imageWidth = imageNDArray.shape[:2] matrixNDArray = cv2.getRotationMatrix2D((imageWidth / 2, imageHeight / 2), 90, 1) rotateImageNDArray = cv2.warpAffine(imageNDArray, matrixNDArray, (imageWidth, imageHeight)) cv2.imwrite("target.jpg", rotateImageNDArray) cv2.imshow("rotate image", rotateImageNDArray) cv2.waitKey(0) cv2.destroyAllWindows() |
source.jpg
■ warpAffine 함수를 사용해 이미지를 이동하는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
import cv2 import numpy as np imageNDArray = cv2.imread("source.jpg") imageHeight, imageWidth = imageNDArray.shape[:2] matrixNDArray = np.float32([[1, 0, 100], [0, 1, 100]]) translateImageNDArray = cv2.warpAffine(imageNDArray, matrixNDArray, (imageWidth, imageHeight)) cv2.imwrite("target.jpg", translateImageNDArray) cv2.imshow("translation image", translateImageNDArray) cv2.waitKey(0) cv2.destroyAllWindows() |
source.jpg
■ 이미지를 자르는 방법을 보여준다. ▶ 예제 코드 (PY)
|
import cv2 imageNDArray = cv2.imread("d:\\source.jpg") cropImageNDArray = imageNDArray[0:200, 150:350] cv2.imwrite("d:\\target.jpg", cropImageNDArray) cv2.imshow("crop image", cropImageNDArray) cv2.waitKey(0) cv2.destroyAllWindows() |
source.jpg
■ resize 함수를 사용해 이미지 크기를 변경하는 방법을 보여준다. ▶ 예제 코드 (PY)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
import cv2 imageNDArray = cv2.imread("d:\\source.jpg") imageHeight, imageWidth = imageNDArray.shape[:2] resizeHeight = int(0.5 * imageHeight) resizeWidth = int(0.5 * imageWidth ) resizeImageNDArray = cv2.resize(imageNDArray, (resizeHeight, resizeWidth), interpolation = cv2.INTER_CUBIC) cv2.imwrite("d:\\target.jpg", resizeImageNDArray) cv2.imshow("resize image", resizeImageNDArray) cv2.waitKey(0) cv2.destroyAllWindows() |
source.jpg
■ cvtColor 함수를 사용해 색상 모드를 변경하는 방법을 보여준다. ▶ 예제 코드 (PY)
|
import cv2 imageNDArray = cv2.imread("d:\\source.jpg") grayscaleImageNDArray = cv2.cvtColor(imageNDArray, cv2.COLOR_BGR2GRAY) cv2.imwrite("d:\\target.jpg", grayscaleImageNDArray) cv2.imshow("grayscale image", grayscaleImageNDArray) cv2.waitKey(0) cv2.destroyAllWindows() |
source.jpg
■ imwrite 함수를 사용해 이미지 파일을 저장하는 방법을 보여준다. ▶ 예제 코드 (PY)
|
import cv2 imageNDArray = cv2.imread("source.jpg") cv2.imwrite("target.png", imageNDArray) |
■ imread 함수를 사용해 이미지 파일을 로드하는 방법을 보여준다. ▶ main.py
|
import cv2 imageNDArray = cv2.imread("source.jpg", cv2.IMREAD_COLOR) cv2.imshow("image", imageNDArray) cv2.waitKey(0) cv2.destroyAllWindows() |
▶ requirements.txt
|
numpy==1.23.1 opencv-python==4.6.0.66 pip==22.0.4 setuptools==58.1.0 |
source.jpg