참고 사이트 : https://076923.github.io/posts/Python-opencv-28/
OpenCV 는 Open Source Computer Vision Library 의 약어
실시간 영상 처리에 중점을 둔 영상 처리 라이브러리로써 Apache2.0 라이선스하에 배포되어 학술적 용도 외에도 상업적으로도 사용가능하다. 참 좋네잉
OpenCV 는 계산 효율성과 실시간 처리에 중점을 두고 설계
500가지 넘는 알고리즘에 최적화돼있으며
물체인식, 얼굴인식, 등 활용할 수 있다.
필자가 사용하는 CV2 의 현재 버전은 4.5.3 으로 라즈베리파이4 2G 모델을 사용중입니다.
이 포스팅에서 사용한 예제 코드는 아래 gitlab 에서 다운로드 가능합니다.
http://gitlab.leehands.com/ai/opencv
저장된 이미지 읽기 출력 쓰기
import cv2
def main():
image = cv2.imread("image/sample.jpg",cv2.IMREAD_GRAYSCALE) # Read Image file (or IMREAD_COLOR )
cv2.imshow("sample",image) # Output image
cv2.waitKey(0) # Wait Keyboard input , if 0 , infinite wait
cv2.destroyAllWindows() # exit windows
cv2.imwrite("image/sample_gray.jpg",image) # write image
if __name__ == '__main__':
main()
cv2.IMREAD_UNCHANGED : 원본 사용
cv2.IMREAD_GRAYSCALE : 1 채널, 그레이스케일 적용
cv2.IMREAD_COLOR : 3 채널, BGR 이미지 사용
cv2.IMREAD_ANYDEPTH : 이미지에 따라 정밀도를 16/32비트 또는 8비트로 사용
cv2.IMREAD_ANYCOLOR : 가능한 3 채널, 색상 이미지로 사용
cv2.IMREAD_REDUCED_GRAYSCALE_2 : 1 채널, 1/2 크기, 그레이스케일 적용
cv2.IMREAD_REDUCED_GRAYSCALE_4 : 1 채널, 1/4 크기, 그레이스케일 적용
cv2.IMREAD_REDUCED_GRAYSCALE_8 : 1 채널, 1/8 크기, 그레이스케일 적용
cv2.IMREAD_REDUCED_COLOR_2 : 3 채널, 1/2 크기, BGR 이미지 사용
cv2.IMREAD_REDUCED_COLOR_4 : 3 채널, 1/4 크기, BGR 이미지 사용
cv2.IMREAD_REDUCED_COLOR_8 : 3 채널, 1/8 크기, BGR 이미지 사용
카메라 출력
import cv2
def main():
capture = cv2.VideoCapture(0)
capture.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
while cv2.waitKey(10) < 0:
ret , frame = capture.read()
cv2.imshow("Chap2_camera",frame)
capture.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
main()
도형 그리기
import cv2
import numpy as np
def main():
src = np.zeros((768,1366,3),dtype=np.uint8)
src = cv2.line(src, (100,100),(1200,100),(0,0,255),3,cv2.LINE_AA)
src = cv2.circle(src,(300,300),50,(0,255,0),cv2.FILLED, cv2.LINE_4)
src = cv2.rectangle(src,(500,200),(1000,400),(255,0,0),5,cv2.LINE_8)
src = cv2.ellipse(src,(1200,300),(100,50),0,90,180,(255,255,0),2)
pts1 = np.array([[100,500],[300,500],[200,600]])
pts2 = np.array([[600,500],[800,500],[700,600]])
src = cv2.polylines(src,[pts1],True,(0,255,255),2)
src = cv2.fillPoly(src,[pts2],(255,0,255),cv2.LINE_AA)
src = cv2.putText(src, "SAMPLE",(900,600),cv2.FONT_HERSHEY_COMPLEX,2,(255,255,255),3)
cv2.imshow("src",src)
cv2.waitKey()
cv2.destroyAllWindows()
if __name__ == '__main__':
main()
캡쳐 녹화
import datetime
import cv2
def main():
capture = cv2.VideoCapture(0)
capture.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
record = False
while True:
# if(capture.get(cv2.CAP_PROP_POS_FRAMES) == capture.get(cv2.CAP_PROP_FRAME_COUNT)):
# capture.open("image/chap4_sample.mp4")
ret,frame = capture.read()
cv2.imshow("videoframe",frame)
now = datetime.datetime.now().strftime("%d_%H-%M-%S")
key = cv2.waitKey(33)
if key == 27:
print("exit")
break
elif key == 65: #'A'
print("capture")
cv2.imwrite("image/"+str(now)+".png",frame)
elif key == 66: #'B'
print("record")
record = True
video = cv2.VideoWriter("image/"+str(now)+".avi",fourcc,20.0,(frame.shape[1],frame.shape[0]))
elif key == 67: #'C'
print("stop record")
record = False
video.release()
if record == True:
print("recording..")
video.write(frame)
capture.release()
cv2.destroyAllWindows()
if __name__ == '__main__':
main()
'Open Project > 텐서플로_사물인식' 카테고리의 다른 글
OpenCV , 파이썬을 사용해 카메라 영상 출력하기 (0) | 2022.06.03 |
---|---|
VLC Player, 라즈베리파이에 연결된 카메라를 스마트폰에서 보자 (0) | 2022.06.03 |
pose estimation 소스 분석 (텐서플로) (0) | 2022.06.02 |
라즈베리파이3 , 카메라 연결하여 사물인식 예제 (텐서플로 라이트) (0) | 2022.05.18 |