Knowhow/Vision 44

Opencv large FoV image undistortion

카메라 intrinsic calibration을 마치면 보통 K matrix와 distortion coefficient를 얻는다. K matrix의 경우, fx, fy, cx, cy로 구성된 3x3 matrix일 것이고, distortion coefficient는 일반적인 화각의 카메라라면 5개, 그 외 다른 광각이라면 최대 14개까지 나올 것이다. 그리고 이 값을 사용해서 다음과 같은 함수를 통해 이미지의 왜곡을 펼치고 왜곡이 보정된 이미지 및 포인트를 사용하게 된다. image_ud = cv2.undistort(image, K, dist) point_ud = cv2.undistortPoints(img_pt, K, dist, P=K) 하지만 광각 이미지의 경우, 위 함수를 통해 얻은 undistorte..

Knowhow/Vision 2022.06.16

Opencv multi webcam 사용 시 인식 확인

opencv에서 라이브 웹캠을 2개 이상 사용하고자 할 때, 보통 아래와 같이 접근한다. import cv2 cam0 = cv2.VideoCapture(0) cam1 = cv2.VideoCapture(1) ... camN = cv2.VideoCapture(N) #N is a camera index 이 때, 분명 카메라 N대는 제대로 연결되어 있는데 다음과 같은 오류가 나면서 인식이 안되는 상황이 있을 수 있다. [ WARN:0@0.132] global /io/opencv/modules/videoio/src/cap_v4l.cpp (889) open VIDEOIO(V4L2:/dev/video1): can't open camera by index 이 문제의 원인은 코드에 사용한 camera index와 실제 ..

Knowhow/Vision 2022.06.13

Opencv webcam resolution control

opencv로 웹캠의 해상도를 변경하고 싶을 때, 보통 아래와 같은 코드로 변경한다. import cv2 cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080) 그런데 위 코드가 동작하지 않을 때가 있는데 그 이유는, 1. 카메라가 지원하지 않는 해상도일 경우, 2. 카메라가 지원하는 해상도이지만, pixel format이 안 맞을 경우 1. 카메라가 지원하지 않는 해상도일 경우는 당연히 안된다. 2. 카메라가 지원하는 해상도이지만 그래도 안되는 경우는 pixel format이 YUYV인지, MJPG인지 확인할 필요가 있다. uvcdynctrl -f Linux일 경우, ..

Knowhow/Vision 2022.06.13

Opencv 광각 (Large FoV) 카메라 intrinsic calibration

Opencv 를 이용해서 카메라를 intrinsic calibration하고자 할 때, 보통은 아주 쉽게 다음의 함수를 이용해서 할 수 있다. import cv2 mtx = None dist = None rvecs = None tvecs = None obj_points = TARGET_3DPOINT img_points = TARGET_2DPOINT RMSE, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(obj_points, img_points, (img_w, img_h), mtx, dist, rvecs, tvecs) 하지만 광각 카메라로 취득한 이미지를 대상으로 intrinsic calibration을 시도할 때, 위 함수를 그대로 사용할 경우, reprojectio..

Knowhow/Vision 2021.11.22