gpt4 book ai didi

python - Python-OpenCv相机校准-将 map 矩阵保存到文件并读回

转载 作者:行者123 更新时间:2023-12-02 17:27:02 27 4
gpt4 key购买 nike

我试图将摄像机校准的结果存储为txt文件,该结果将从以下脚本中检索为mapx和mapy:

mapx, mapy = cv2.initUndistortRectifyMap(mtx, dist, None, newcameramtx, (w, h), cv2.CV_16SC2)

这是两个具有各自形状的矩阵: (480, 640, 2)(480, 640)
保存功能正常运行,它是以下之一:
def write(filename, data):
with open(filename, 'w') as outfile:
outfile.write('# Array shape: {0}\n'.format(data.shape))

for data_slice in data:
np.savetxt(outfile, data_slice, fmt='%-7.0f')
outfile.write('# New slice\n')

存储文件后,将显示以下内容(Mapy示例):
# Array shape: (480, 640)
372
170
992
823
621
452
282
113
935
....
86
193
# New slice
274
203
131
92
21
1006
935
....

我正在使用此功能将其读回:
shapex = (480, 640, 2)
shapey = (480, 640)

file_mapx = "mapx.txt"
file_mapy = "mapy.txt"

mapx = np.loadtxt(file_mapx) if os.path.exists(file_mapx) else None
mapy = np.loadtxt(file_mapy) if os.path.exists(file_mapy) else None


if mapx is not None:
print("Reshape mapx")
mapx = mapx.reshape(shapex)
if mapy is not None:
print("Reshape mapy")
mapy = mapy.reshape(shapey)

一切接缝都能正常工作,但是当我将这些贴图用于不失真功能时
# undistort
undistorted_img = cv2.remap(img, mapx, mapy, cv2.INTER_LINEAR)

我收到以下错误:
undistorted_img = cv2.remap(img, mapx, mapy, cv2.INTER_LINEAR)
cv2.error: OpenCV(4.1.1) /home/myuser/opencv/modules/imgproc/src/imgwarp.cpp:1815: error: (-215:Assertion failed) ((map1.type() == CV_32FC2 || map1.type() == CV_16SC2) && map2.empty()) || (map1.type() == CV_32FC1 && map2.type() == CV_32FC1) in function 'remap'

我尝试遵循 here问题,但我无法理解该错误,有什么帮助吗?

最佳答案

如错误消息所述,您要重新映射的输入必须具有正确的类型。使用CV_16SC2时,相应的numpy类型为np.int16。假设正确读取了所有值,则可以使用mapx.astype(np.int16)mapy.astype(np.int16)转换数组。

您应该考虑保存相机矩阵而不是保存变换贴图。如果您以后想在initUndistortRectifyMap()中使用其他选项(例如,如果您决定更改图像分辨率)或要计算需要了解固有参数的其他内容,将很有用。相机矩阵也比变换贴图小很多。

关于python - Python-OpenCv相机校准-将 map 矩阵保存到文件并读回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58645871/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com