# Given a set of distorted image points, I can use cv2.undistortpoints
def undistort_points(points, kmat, distcoeff):
undistorted_pts_normed = cv2.undistortPoints(points, kmat, distcoeff).squeeze()
cx = kmat[0,2]
cy = kmat[1,2]
fx = kmat[0,0]
fy = kmat[1,1]
undistorted_uv = np.empty(undistorted_pts_normed.shape)
undistorted_uv[:,0] = fx * undistorted_pts_normed[:,0] + cx
undistorted_uv[:,1] = fy * undistorted_pts_normed[:,1] + cy
ret = [Point(x=int(pt[0]),y=int(pt[1])) for pt in undistorted_uv]
# To distort the points I use the distortion equations
def distort_points(points, kmat, distcoeff):
cx = kmat[0,2]
cy = kmat[1,2]
fx = kmat[0,0]
fy = kmat[1,1]
k1,k2,p1,p2,k3 = distcoeff
# Convert to normalized points
normed_points = np.empty(points.shape)
normed_points[:,0] = (points[:,0] - cx)/fx
normed_points[:,1] = (points[:,1] - cy)/fy
# Apply distortion
r2 = normed_points[:,0]**2 + normed_points[:,1]**2 # r squared
radial_dist = (1 + k1*r2 + k2*(r2**2) + k3*(r2**3))[...,np.newaxis]
tangential_dist = np.empty(normed_points.shape)
tangential_dist[:,0] = p2 * (r2 + 2 * (normed_points[:,0]**2)) + 2 * p1 * normed_points[:,0] * normed_points[:,1]
tangential_dist[:,1] = p1 * (r2 + 2 * (normed_points[:,1]**2)) + 2 * p2 * normed_points[:,0] * normed_points[:,1]
distorted_points = radial_dist * normed_points + tangential_dist
# Return points in uv space
distorted_uv = np.empty(distorted_points.shape)
distorted_uv[:,0] = fx * distorted_points[:,0] + cx
distorted_uv[:,1] = fy * distorted_points[:,1] + cy
return distorted_uv
Я столкнулся с cv2.initundistortrectifymap , который я могу запустить один раз для хранения картирования для каждого пикселя в Undertort, что делает беспрецедентное значение очень эффективным. Тем не менее, я не уверен, как использовать MAPX и MAPY для точек изображения вместо полных изображений. Ниже показано, как я вычисляю отображения MAPX и MAPY. < /P>
newcameramtx, roi = cv2.getOptimalNewCameraMatrix(kmat, distcoeff, (1920, 1080), 0, (1920, 1080))
mapx, mapy = cv2.initUndistortRectifyMap(kmat, distcoeff, None, newcameramtx, (1920, 1080), 5)
< /code>
Я также хотел бы узнать, возможно ли использовать те же сопоставления для преобразования из неискаженных точек в искаженные точки. Любая помощь будет очень оценена!
Я хотел бы найти быструю реализацию искажений и невостального изображения точек. Ниже приведены мои текущие реализации, которые работают хорошо < /p> [code]# Given a set of distorted image points, I can use cv2.undistortpoints def undistort_points(points, kmat, distcoeff): undistorted_pts_normed = cv2.undistortPoints(points, kmat, distcoeff).squeeze() cx = kmat[0,2] cy = kmat[1,2] fx = kmat[0,0] fy = kmat[1,1] undistorted_uv = np.empty(undistorted_pts_normed.shape) undistorted_uv[:,0] = fx * undistorted_pts_normed[:,0] + cx undistorted_uv[:,1] = fy * undistorted_pts_normed[:,1] + cy ret = [Point(x=int(pt[0]),y=int(pt[1])) for pt in undistorted_uv]
# To distort the points I use the distortion equations def distort_points(points, kmat, distcoeff): cx = kmat[0,2] cy = kmat[1,2] fx = kmat[0,0] fy = kmat[1,1] k1,k2,p1,p2,k3 = distcoeff
# Return points in uv space distorted_uv = np.empty(distorted_points.shape) distorted_uv[:,0] = fx * distorted_points[:,0] + cx distorted_uv[:,1] = fy * distorted_points[:,1] + cy return distorted_uv [/code] Я столкнулся с cv2.initundistortrectifymap , который я могу запустить один раз для хранения картирования для каждого пикселя в Undertort, что делает беспрецедентное значение очень эффективным. Тем не менее, я не уверен, как использовать MAPX и MAPY для точек изображения вместо полных изображений. Ниже показано, как я вычисляю отображения MAPX и MAPY. < /P> newcameramtx, roi = cv2.getOptimalNewCameraMatrix(kmat, distcoeff, (1920, 1080), 0, (1920, 1080)) mapx, mapy = cv2.initUndistortRectifyMap(kmat, distcoeff, None, newcameramtx, (1920, 1080), 5) < /code> Я также хотел бы узнать, возможно ли использовать те же сопоставления для преобразования из неискаженных точек в искаженные точки. Любая помощь будет очень оценена!
Я строю линейную диаграмму в ECharts, но хочу наклонить/взвесить определенный диапазон оси Y, чтобы он был больше, чем он был бы линейно. Например, я бы хотел, чтобы значения 0–70 занимали 1/3 размера диаграммы, а остальные 70–100 — 2/3. У меня нет...
С Opengl мне нужно исказить (исказить) весь вид, но должен двигаться только один угол. Это будет 2D, но это нормально использовать также перспективную проекцию. Я не хочу менять положение вершины с шейдеров, потому что искаженная область должна...
У кого -нибудь из вас есть идея, как исказить изображение в любом четырехугольнике?
Я хочу реализовать изображение, которое вы можете вытащить в любом углу в любом направлении, искажая изображение. У кого -нибудь есть идея, как это сделать? Я...
Я хотел бы получить некоторые разъяснения по параметрам функции OpenCV калибровать камеру.
Эта функция
cv.CalibrateCamera2(objectPoints, imagePoints, pointCounts, imageSize, cameraMatrix, distCoeffs, rvecs, tvecs, flags=0)