반응형

정말 개같은 에러가 계속 났다. 아래와 같은 에러인데 검색해서 모든 방법을 다 해봤다.

conda에서 지우고 다시 깔고 opencv-contrib-python 깔고 다해봤는데 다 다다다다다안됐다.

cv2.error: OpenCV(4.5.5) /io/opencv/modules/highgui/src/window.cpp:1268: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvShowImage'

 

그럼 어떻게 해결했느냐?

pip list를 입력해서 opencv-python-headless가 있으면 지우자

pip uninstall opencv-python-headless

그럼 드디어 웹캠이 된다.....

반응형

'Python' 카테고리의 다른 글

추상클래스(abstract class)  (0) 2022.04.09
덕 타이핑이란?  (0) 2022.04.09
pix2pix augmentation  (0) 2022.03.31
기본적인 베이스 코딩 구조(Class 개념 - 붕어빵 비유)  (0) 2022.02.03
exception print하기  (0) 2022.01.26
반응형

pix2pix 태스크를 진행할 때 데이터 셋을 모을 필요가 있다.

나의 경우 구글맵 실사 이미지를 2D 이미지로 변환하는 태스크를 수행한다.

이때 학습 이미지 화질이나 질감 등에 크게 영향을 끼치지 않는 증강기법을 적용한다.

flip, rotate를 적용하면 좋을 것 같다.

def h_flip(input_image, real_image):
    input_image = cv2.flip(input_image,1)
    real_image = cv2.flip(real_image,1)
    return input_image, real_image

def v_flip(input_image, real_image):
    input_image = cv2.flip(input_image,0)
    real_image = cv2.flip(real_image,0)
    return input_image, real_image

def rotate90(input_image, real_image):
    input_image = cv2.rotate(input_image,cv2.ROTATE_90_CLOCKWISE)
    real_image = cv2.rotate(real_image,cv2.ROTATE_90_CLOCKWISE)
    return input_image, real_image
    
def rotate180(input_image, real_image):
    input_image = cv2.rotate(input_image,cv2.ROTATE_180)
    real_image = cv2.rotate(real_image,cv2.ROTATE_180)
    return input_image, real_image
    
def rotate270(input_image, real_image):
    input_image = cv2.rotate(input_image,cv2.ROTATE_90_COUNTERCLOCKWISE)
    real_image = cv2.rotate(real_image,cv2.ROTATE_90_COUNTERCLOCKWISE)
    return input_image, real_image

기존에 노가다로 625개의 데이터 셋을 구비했는데 이러한 증강기법으로 3750개로 늘어났다.

반응형
반응형

docker 를 사용하여 처음
pip install opencv-python
을 사용해보면 에러가 날 때가 있다 대체로 다음과 같은 에러이다.

ImportError: libGL.so.1: cannot open shared object file: No such file or directory

이 에러는 라이브러리가 설치 안된 것으로 설치만 해주면 에러가 없어진다 :)

sudo apt-get install libgl1-mesa-glx

반응형
반응형

대체로 도커 처음 환경에서 apt-get update만 했을 경우 opencv 이용한 코드를 실행할 때 제목과 같은 에러를 볼 수 있습니다.

해결법:

sudo apt-get install libgl1-mesa-glx

설치해주시면 opencv 사용 가능해집니다.

외우시면 될 듯..

반응형
반응형

영상을 반전시키고 싶을 때가 있다.

img = cv2.imread(os.path.join([img_path]))
img = cv2.flip(img,1)

1일 경우 수평 뒤집기 0일 경우 수직 뒤집기이다.

반응형
반응형

히스토그램 평활화나 스트레칭은 주로 어두운 영상이나 밝은 영상에서 명암 대비를 높여주기위해 사용한다. 

히스토그램을 가지고 평활화를 하거나 스트레칭을 하는 기법은 주로 그레이스케일 차원에서 이루어진다. 즉, rgb 데이터인 경우 명암을 관장하는 채널을 추출하기 위해 Yuv나 Lab 컬러모델로 변환 후 Y 값이나 L 값을 이용하여 평활화, 스트레칭 적용 후 다시 머징하는 것이 기본 과정이다.

히스토그램 평활화에 여러 기법들이 있는데 크게 두가지로 나눌 수 있다.

Global: 영상 전체를 입력하여같은 모든 픽셀에 파라미터를 적용하는 것

Adaptive: 윈도우 사이즈를 정하여 부분 별로 파라미터를 적용하는 것

Global의 단점을 개선하기 위해 Adaptive 기법이 제안되었는데 Global의 단점은 특정 부분의 명도대비가 적고 특정부분이 높을 경우 모두 원만하게 처리가 불가능하다는 점이다. 즉, 같은 파라미터로 적용하니 제대로된 값을 얻기 어렵다는 뜻이다.

히스토그램 평활화를 python으로 적용하려면 간단하게 아래와 같은 코드를 사용하면 된다.

src = cv2.imread('something.png', cv2.IMREAD_GRAYSCALE)

dst = cv2.equalizeHist(src)

Adaptive 기법의 대표주자는 Contrast Limited Adaptive Histogram Equalization (CLAHE) 기법이 있다. 마찬가지로 Python으로 적용해 보려면 다음과 같다. CLAHE는 말 그대로 명도대비를 제한하며 적응적으로 히스토그램을 평활화하는 것으로 파라미터가 윈도우 사이즈, 클립 리미트가 들어간다. 클립 리미트가 명도 제한 값이고 tilieGridSize가 윈도우 사이즈이다.

#CLAHE
lab = cv2.cvtColor(im, cv2.COLOR_BGR2LAB)
lab_planes = cv2.split(lab)
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(4,4))
lab_planes[0] = clahe.apply(lab_planes[0])

lab = cv2.merge(lab_planes)
bgr1 = cv2.cvtColor(lab, cv2.COLOR_LAB2BGR)

위에서 언급했듯 불러온 im이 rgb 데이터라 가정할 때 opencv에선 bgr로 변환되므로 bgr2lab을 통해 명암 채널(l)을 추출한다. 

이후 opencv에서 제공하는 createCLAHE 메소드에 파라미터를 입력하여 clahe를 생성해주고 명암 채널에 clahe를 적용한 후 머징한다.

다음은 스트레칭인데 스트레칭은 단순히 명암채널을 0~255로 노멀라이즈하는 것 뿐이다. 만약 어떤 영상의 픽셀값이 100~200 사이에 분포되어 있다면 노멀라이즈를 통해 스트레칭, 쫙 펴줄 수 있다. 코드는 아래와 같다.

#stretching
lab = cv2.cvtColor(im, cv2.COLOR_BGR2LAB)
lab_planes = cv2.split(lab)
lab_planes[0] = cv2.normalize(lab_planes[0], None, 0, 255, cv2.NORM_MINMAX)

lab = cv2.merge(lab_planes)
bgr1 = cv2.cvtColor(lab, cv2.COLOR_LAB2BGR)

아래 이미지는 각각 손금 데이터 원본, CLAHE, 스트레칭을 적용한 결과값이다.

반응형
반응형
cap = cv2.VideoCapture(path) #path가 0, 1이면 웹캠, 경로면 파일 읽기
frame_size = [cap.get(cv2.CAP_PROP_FRAME_HEIGHT), cap.get(cv2.CAP_PROP_FRAME_WIDTH)]
frame_num = (cap.get (cv2.CAP_PROP_FRAME_COUNT))

prev_time = 0
FPS = 90

fourcc = cv2.VideoWriter_fourcc(*'DIVX')
# cv2.VideoWriter params
# (path, fourcc, fps, (w, h))
out = cv2.VideoWriter('0.avi', fourcc, 60.0, (int(frame_size[1]), int(frame_size[0])))

for pos in range(int(cap.get(cv2.CAP_PROP_FRAME_COUNT))):
	ret, img = cap.read() # ret은 프레임 읽은 결괏값: True or False, img는 프레임
	current_time = time.time() - prev_time # 현재 시간 설정

	if (ret is True) and (current_time > 1./ FPS) :# 현재 시간이 FPS에 합당한지?

		prev_time = time.time() #prev_time 초기화
		out.write(img) #프레임 쓰기
	
cap.release()

 

프레임 사이즈, 프레임 수는 추가 정보

반응형

+ Recent posts