使用opencv+python 自己绘制标定板程序:
def getCheckerboardImage(block_length=50, width=10, height=8, iswrite=0, isshow=0):
img_black = np.zeros([block_length, block_length, 3], np.uint8)
img_white = np.ones([block_length, block_length, 3], np.uint8) * 255
# print(img)
for h in range(height):
for w in range(width):
if w is 0:
if h % 2 is 0:
width_temp = img_black
else:
width_temp = img_white
else:
if (w + h) % 2 is 0:
width_temp = np.hstack((width_temp, img_black))
else:
width_temp = np.hstack((width_temp, img_white))
if h is 0:
checkerboardImg = width_temp
else:
checkerboardImg = np.vstack((checkerboardImg, width_temp))
if isshow:
cv2.imshow("checkerboardImg", checkerboardImg)
cv2.waitKey()
if iswrite:
cv2.imwrite("checkerboardImg.jpg", checkerboardImg)
return checkerboardImg
if __name__ == '__main__':
block_length = 50 #每个块长或宽的像素值
witdh = 10 #水平方向块数
height = 8 #竖直方向块数
bwrite = 0 #是否显示
bshow = 0 #是否保存图像
scale_add = 2
CImage = getCheckerboardImage(block_length, witdh, height, 0, 0)
Opencv对于相机校准和3D重建的讲解:
这个写的真的很细,如果想了解一些理论、算法方面的东西,可以先查看这篇文章
相机针孔模型----从世界坐标系,到相机坐标系,再到图像物理坐标系,最后到图像像素坐标系的转换过程解析
https://blog.csdn.net/wangxiaokun671903/article/details/37966891
相机转换的理论过程
单目摄像头标定与畸变矫正(C++,opencv)
https://zhuanlan.zhihu.com/p/55648494
有C++和opencv的实践代码
opencv-python 实现鱼眼矫正 棋盘矫正法:
https://blog.csdn.net/hpuhjl/article/details/80899931
鱼眼摄像头的畸变矫正方法-python+opencv:
https://blog.csdn.net/donkey_1993/article/details/103909811?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.add_param_isCf
这两个python版本的程序都没有跑通,问题出在这个函数:
cv2.fisheye.calibrate(objpoints, imgpoints,gray.shape[::-1],K,D, rvecs,tvecs,calibration_flags, (cv2.TERM_CRITERIA_EPS+cv2.TERM_CRITERIA_MAX_ITER, 30, 1e-6))
个人是2020.11月份配置的python版本opencv,怀疑是版本升级造成了一些函数的变化。
C++ opencv 程序
https://blog.csdn.net/u011475210/article/details/79185543
调试成功
对开源代码的规范和整理:
网络开源代码:全部代码都在主函数中,并且需要手动辅助挑选图像
整理后:纯自动,代码较规范,