Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python OpenCV:Undersort(对于图像)和UndersortPoints不一致_Python_Opencv_Distortion - Fatal编程技术网

Python OpenCV:Undersort(对于图像)和UndersortPoints不一致

Python OpenCV:Undersort(对于图像)和UndersortPoints不一致,python,opencv,distortion,Python,Opencv,Distortion,对于测试,我生成一个网格图像作为矩阵,再次生成网格点作为点阵列: 这表示“扭曲”的相机图像以及一些特征点。 现在取消对图像和栅格点的扭曲时,会得到以下结果: (请注意,“失真”图像是直的,而“未失真”图像是变形的,这不是重点,我只是用一个直的测试图像来测试未失真函数。) 栅格图像和红色栅格点现在完全未对齐。我在谷歌上搜索发现,有些人忘记在不失真点中指定“新相机矩阵”参数,但我没有。文档中也提到了标准化,但当我使用身份矩阵作为相机矩阵时,仍然存在问题。而且,在中部地区,它非常适合 为什么这不

对于测试,我生成一个网格图像作为矩阵,再次生成网格点作为点阵列:

这表示“扭曲”的相机图像以及一些特征点。 现在取消对图像和栅格点的扭曲时,会得到以下结果:

(请注意,“失真”图像是直的,而“未失真”图像是变形的,这不是重点,我只是用一个直的测试图像来测试未失真函数。)

栅格图像和红色栅格点现在完全未对齐。我在谷歌上搜索发现,有些人忘记在不失真点中指定“新相机矩阵”参数,但我没有。文档中也提到了标准化,但当我使用身份矩阵作为相机矩阵时,仍然存在问题。而且,在中部地区,它非常适合

为什么这不一样,我用错了东西吗

我在Python中使用cv2(4.1.0)。以下是测试代码:


将numpy作为np导入
将matplotlib.pyplot作为plt导入
进口cv2
w=401
h=301
#助手
#--------
def绘图图像和点(im、pu、pv):
plt.imshow(im,cmap=“灰色”)
plt.散射(pu,pv,c=“红色”,s=16)
plt.xlim(0,w)
plt.ylim(0,h)
plt.show()
def cv2_不失真点(uSrc、vSrc、cameraMatrix、DistCoefs):
uvSrc=np.array([np.matrix([uSrc,vSrc]).transpose()],dtype=“float32”)
uvDst=cv2。不失真点(uvSrc、cameraMatrix、Distceffs、None、cameraMatrix)
uDst=[uv[0]表示uvDst[0]中的uv
vDst=[uv[1]表示uvDst中的uv[0]]
返回uDst、vDst
#测试数据
#----------
#生成网格图像
img=np.one((h,w),dtype=“float32”)
img[0::20,:]=0
img[:,0::20]=0
#生成网格点
uPoints,vPoints=np.meshgrid(范围(0,w,20),范围(0,h,20),索引='xy')
uPoints=uPoints.flatte()
vPoints=vPoints.flatte()
#查看点是否与图像对齐
plotImageAndPoints(img、uppoints、vPoints)#完美!
#分别取消图像和点的扭曲
#---------------------------------------------
#摄像机矩阵参数
fx=1
fy=1
cx=w/2
cy=h/2
#畸变参数
k1=0.00003
k2=0
p1=0
p2=0
#转换为opencv
mtx=np矩阵([
[fx,0,cx],
[0,fy,cy],
[ 0,  0,  1]
],dtype=“float32”)
dist=np.数组([k1,k2,p1,p2],dtype=“float32”)
#不失真图像
imgUndist=cv2.不失真(img、mtx、dist)
#不失真点
uPointsUndist,vPointsUndist=cv2_不失真点(uPoints,vPoints,mtx,dist)
#测试它们是否仍然匹配
绘图图像和点(imgUndist、uPointsUndist、vPointsUndist)#糟透了!
感谢您的帮助