[요약]
cv.cvtColor(frame, cv.COLOR_BGR2GRAY)후 write로 영상 저장 시 오류가 나면
VideoWrite객체를 초기화 하는 과정에서 isColor=False의 속성값을 추가해준다.
웹캠에서 받아온 영상을 그레이 스케일로 저장하기 위해 다음의 코드를 짜고 있었다.
import cv2 as cv
def invert():
cap = cv.VideoCapture(0) # 웹캠에서 받아오기
if not cap.isOpened():
print("Camera open failed!")
return
# output.avi 동영상 파일 저장
w = round(cap.get(cv.CAP_PROP_FRAME_WIDTH))
h = round(cap.get(cv.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv.CAP_PROP_FPS) # 저장에 필요한 정보들
fourcc = cv.VideoWriter_fourcc(*'DIVX')
delay = round(1000 / fps)
outputVideo = cv.VideoWriter('output.avi', fourcc, fps, (w, h), isColor=False) # VideoWriter 객체초기화
if not outputVideo.isOpened():
print('File open failed!')
return
# 프레임정보 가져와서 저장
while True:
ret, frame = cap.read() # 각 프레임 읽기
if not ret:
break
previous = frame.mean() # 직전 프레임의 평균 밝기
current = # 현재 프레임의 평균 밝기
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) # 그레이스케일로 변환
inversed = ~gray
outputVideo.write(gray)
cv.imshow('frame', gray) # 원본 화면에 출력
#cv.imshow('inversed', inversed) # 반전 화면에 출력
if cv.waitKey(delay) == 27:
break
cv.destroyAllWindows()
invert()
코드의 이부분에서
frame을 cv.cvtColor 함수를 이용하여 그레이 스케일로 변환하고 write로 저장하면 에러가 났다.
while True:
ret, frame = cap.read() # 각 프레임 읽기
if not ret:
break
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) # 그레이스케일로 변환
outputVideo.write(gray) # 저장
cv.imshow('frame', gray) # 원본 화면에 출력
#cv.imshow('inversed', inversed) # 반전 화면에 출력
if cv.waitKey(delay) == 27:
break
imshow는 잘 되는데 막상 저장된 영상을 보려고 하면 자꾸 0xc10100be에러가 뜨며 파일이 손상되어 열리지 않았다.
그런데 gray로 바꾸는 코드인
>>> gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) # 그레이스케일로 변환
부분을 빼면 잘 저장된다.
영상 형식이 달라서 그랬다.
frame은 3채널(a,b,c)이고 gray는 2채널(a,b)이기 때문.
이걸 또 어케 바꾸나.. 하다가
윗 부분이 잘못됐었던 것을 알았다.
outputVideo = cv.VideoWriter('output.avi', fourcc, fps, (w, h), isColor=False) # VideoWriter 객체초기화
isColor=False가 없었는데 넣어주었다.
애초에 색깔이 없는 상태로 VideoWriter 객체를 만들겠다는 뜻..!
이렇게 하니 write를 써도 그레이스케일로 잘 저장이 된다.
객체를 초기화 하는 과정에서 isColor=False의 속성값을 추가해준다.
'컴퓨터 비전' 카테고리의 다른 글
[OpenCV][Python] 주사위 눈금 읽기 (0) | 2022.12.14 |
---|---|
[OpenCV][Python] 여러 개의 사각형 내의 원의 수 세기 | 주사위 눈금 읽기 | 여러 개의 사각형(객체) 대해 수행 (0) | 2022.12.14 |
[OpenCV][Python] 사각형 내의 원의 수 세기 | 주사위 눈금 읽기 | 하나의 사각형(객체) 대해 수행 (0) | 2022.12.14 |
[Python] Numpy 에러 - AttributeError: partially initialized module 'numpy' has no attribute 'array' (0) | 2022.11.04 |
[Python][OpenCV] 이미지 열고 밝기 조절 후 저장하기 - 평균 밝기를 기준으로 (0) | 2022.10.13 |