pythonのOpenCVで画像歪み補正
PythonのOpenCVで画像のゆがみ補正を行いたいのですが、下記のようなコードで撮影したチェスボードから
ゆがみ係数を求めるというのはわかったのですが、Webサービスなどでユーザーのアップロードした画像のゆがみを補正する場合など(画像サイズも不規則)はこの係数はどう求めたらいいのでしょうか?
findChessboardCornersやfindCirclesGridを使用しないでゆがみを補正する方法があればご教授頂ければと思います。
# -*- coding: utf-8 -*-
import numpy as np
import cv2
import glob
fileName = "chess.jpg"
imagePath = "./" + fileName
image = cv2.imread(imagePath)
grayImage = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ChessboardPatternSize = (9, 7)
height, width = image.shape[:2]
objPoints = [] # 3d point
imgPoints = [] # 2d points
# termination criteria
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 0, 0.1)
objp = np.zeros( (np.prod(ChessboardPatternSize), 3), np.float32 )
objp[:,:2] = np.indices(ChessboardPatternSize).T.reshape(-1, 2)
objp *= 1
ret, corners = cv2.findChessboardCorners(grayImage, ChessboardPatternSize)
if ret == True:
corners2 = cv2.cornerSubPix(grayImage, corners, (11, 11), (-1,-1), criteria)
objPoints.append(objp)
imgPoints.append(corners.reshape(-1, 2))
print objPoints
print imgPoints
np.save('objPoints.npy', objPoints)
np.save('imgPoints.npy', imgPoints)