홈>
내 스테레오 이미지를 왜곡하고 수정하고 싶습니다. 이를 위해 Python 2.7에서 Opencv 3.3을 사용했습니다. 내가 사용한 코드는 다음과 같습니다.
import cv2
import numpy as np
cameraMatrixL = np.load('mtx_left.npy')
distCoeffsL = np.load('dist_left.npy')
cameraMatrixR = np.load('mtx_right.npy')
distCoeffsR = np.load('dist_right.npy')
R = np.load('R.npy')
T = np.load('T.npy')
imgleft = cv2.imread('D:\python\camera calibration and 3d const\left\left60.png',0)
imgright = cv2.imread('D:\python\camera calibration and 3d const\Right/right60.png',0)
R1,R2,P1,P2,Q,validPixROI1, validPixROI2 = cv2.stereoRectify(cameraMatrixL,distCoeffsL,cameraMatrixR,distCoeffsR,(640,480),R,T,alpha=1)
print Q
# distort images
undistort_map1, rectify_map1 = cv2.initUndistortRectifyMap(cameraMatrixL, distCoeffsR, R1, P1, (640,480), cv2.CV_16SC2)
undistort_map2, rectify_map2 = cv2.initUndistortRectifyMap(cameraMatrixR, distCoeffsR, R2, P2, (640,480), cv2.CV_16SC2)
undistor_output1 = cv2.remap(imgleft, undistort_map1, rectify_map1, cv2.INTER_LINEAR)
undistor_output2 = cv2.remap(imgright, undistort_map2, rectify_map2, cv2.INTER_LINEAR)
cv2.imshow('undistor_output1',undistor_output1)
cv2.imshow('undistor_output2',undistor_output2)
while (True):
if cv2.waitKey(1) & 0xFF == ord('q'):
break
카메라를 따로 보정 한 다음 획득 한 행렬을
cv2.stereoRectify
에 사용했습니다.
R1,R2,P1,P2,Q
를 얻기 위해
내가
cv2.initUndistortRectifyMap
에서 사용한 행렬
. 그러나 나는 혼란스러운 이미지를 올바르게 얻지 못한다.
와 같이 보입니다.
내 행렬은 :
Q
[[ 1.00000000e+00 0.00000000e+00 0.00000000e+00 -3.23097469e+02]
[ 0.00000000e+00 1.00000000e+00 0.00000000e+00 -2.40008609e+02]
[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 -7.47885268e+00]
[ 0.00000000e+00 0.00000000e+00 -1.53249612e-02 0.00000000e+00]]
cameraMartix Left
[[ 807.24668269 0. 326.78961645]
[ 0. 620.70299534 259.9187458 ]
[ 0. 0. 1. ]]
camearMatrix Right
[[ 567.37537971 0. 278.76995505]
[ 0. 558.21417195 216.22972643]
[ 0. 0. 1. ]]
Rotation
[[ 0.99973813 -0.02260904 0.00353613]
[ 0.02269951 0.99934817 -0.02807079]
[-0.00289917 0.0281437 0.99959968]]
Tranlation
[[-93.46968934]
[ -1.48741179]
[ 24.98692133]]
많은 답변을 읽었지만 아무 문제도 해결하지 못했습니다.
스테레오 재생 방법에 대한 직접적인 해결책 교정 및 교정 OpenCV?
* Python을 사용한 OpenCV (cv2)의 undistortPoints 잘못된 결과
cv2.remap은 아무것도 생성하지 않습니다
initUndistortRectifyMap을 사용하여 이미지 포인트를 정렬 해제
opencv cv2.remap은 이상한 이미지를 만듭니다 *
이 문제에 대한 해결책은 무엇입니까?
감사합니다.
- 답변 # 1
관련 자료
- 파이썬에서 값 오류 예외를 어떻게 설정할 수 있습니까?
- html - 웹 스크랩 핑 (Python 3) 코드에 구문 오류가 있습니까?
- scikit learn - Python 오류입니다 예상되는 2D 배열, 대신 1D 배열이 있습니다 어떻게 수정합니까?
- Python @ attrs로 인해 선택적 속성이있는 개체를 만들 때 오류가 발생합니다
- imap을 사용한 파이썬 오류 로그인은 Gmail에서도 활성화되었습니다
- new operator - 파이썬 - __new__를 실행할 때 오류가 발생합니까? __init__를 호출하지 않음
- 파이썬이 목록 이해에서 오류를 제외하지 않는 이유
- ubuntu - python - 간단한 for 루프 구문 오류
- Python에서 축 레이블이 표시되지 않습니다
- 서버를 시작하는 동안 오류를 표시하는 각도 CLI
- java - 이 프로그램은 컴파일 시간 오류를 표시하고 있습니다 (integer it - arr)에 대한 유형의 잘못된 시작, 왜 오류가 표시됩니까?
- 입력을 위해 Python 생성기를 사용하는 동안 keras의 OOM 오류
- pandas - 파이썬에서 오류 날짜 값을 0으로 채우는 방법
- javascript - graphviz/d3 및 python httpserver에서 포착되지 않은 유형 오류 "thisnode () is null"
- numpy - 파이썬에서이 코드를 실행 한 후이 오류가 계속 나타납니다
- 파이썬은 연결 오류가 발생하더라도 목록을 계속 반복합니다
- 내 파이썬 코드에서 여러 개의 주사위 (예 - 100 개)를 굴리는 중 오류가 발생했습니다 ** 예시 포함 **
- matplotlib - 다른 서브 플롯에서 플롯을 표시하지 않는 다중 Python 플롯
- python selenium - 요소 상호 작용 불가 오류
- python은 sqlite3operationalerror - incomplete input 오류를 제공합니다
트렌드
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- JavaScript 변수를 HTML div에 '출력'하는 방법
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- javascript - swiperjs에서 정지, 재생 버튼 추가
- python - 화면에서 찾은 요소를 찾을 수없는 경우 셀레늄
많은 것들을 시도한 후에이 특정한 문제에 대한 해결책을 찾았습니다. Python OpenCV와 Matlab을 사용하여 얻은 카메라 회전 행렬과 왜곡 행렬을 비교 한 후Python과 Matlab을 사용하여 얻은 행렬 사이에 많은 차이가 있음을 알았습니다. 따라서 다시 카메라를 보정하고 Python 및 OpenCV를 사용하여 스테레오 보정을 수행합니다. 아래 그림은 오래된 행렬 (Python에서 가져온)과 새 행렬 (Python을 사용하여 다시 보정 한 후)의 차이점을 보여줍니다. 이 그림에서 우리는 오래된 경우 (
dist coeff. right old and left old)
)의 오른쪽 및 왼쪽 카메라에 대한 왜곡 계수 매트릭스 사이에 많은 차이가 있음을 알 수 있습니다 새로운 케이스(dist coeff. right new and left new)
에 대한 좌우 카메라의 왜곡 계수 매트릭스와 비교 . 오른쪽 카메라의 경우 오래된 계수는 각각 0.78 및 -0.61에 대해 83.85 및 -19.18이었습니다. 마찬가지로 왼쪽 카메라의 경우 오래된 계수는 각각 -0.38 및 0.73에 대해 123.7 및 -1641.4입니다. 또한 오래된 왼쪽 카메라 매트릭스의 첫 번째 요소 (1,1)은 807.24로 오른쪽 카메라 오래된 매트릭스와 비교할 때 크게 다릅니다. 새로운 왼쪽 카메라 매트릭스는이 요소 값을 552.41로 생각합니다. 이 모든 새로운 행렬을 사용하고 알파 값을 0으로 변경하면(alpha = 0)
나는 다음과 같은 결과를 얻었다.와이즈 비즈 다음 입력을 사용했습니다
여기서
retVal, cm1, dc1, cm2, dc2, r, t, e, f = cv2.stereoCalibrate(objpoints, imgpointsL, imgpointsR, cm1, dc1, cm2, dc2, (640, 480), None, None, cv2.CALIB_FIX_INTRINSIC, criteria)
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.001)