import cv2
import numpy as np
import glob
# 設定尋找亞像素角點的引數,采用的停止準則是最大回圈次數30和最大誤差容限0.001
criteria = (cv2.TERM_CRITERIA_MAX_ITER | cv2.TERM_CRITERIA_EPS, 30, 0.001)
# 獲取標定板角點的位置
objp = np.zeros((6 * 8, 3), np.float32)
objp[:, :2] = np.mgrid[0:8, 0:6].T.reshape(-1, 2) # 將世界坐標系建在標定板上,所有點的Z坐標全部為0,所以只需要賦值x和y
obj_points = [] # 存盤3D點
img_points = [] # 存盤2D點
#glob.glob函式用于讀取圖片并存于一個串列中,用于下面的函式呼叫
images = glob.glob(r"C:\Users\Finder\AppData\Local\Programs\Python\Python36\xiangjibiaodingtupian/*.jpg")
i=0;
for fname in images:
img = cv2.imread(fname)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#將圖片轉換為灰度圖
size = gray.shape[::-1]#用于改變圖片尺寸
ret, corners = cv2.findChessboardCorners(gray, (8, 6), None)
#print(corners)
if ret:
obj_points.append(objp)
corners2 = cv2.cornerSubPix(gray, corners, (5, 5), (-1, -1), criteria) # 在原角點的基礎上尋找亞像素角點
#print(corners2)
if [corners2]:
img_points.append(corners2)
else:
img_points.append(corners)
cv2.drawChessboardCorners(img, (8, 6), corners, ret) # 記住,OpenCV的繪制函式一般無回傳值
i+=1;
cv2.imwrite('conimg'+str(i)+'.jpg', img)
cv2.waitKey(1500)
print(len(img_points))
cv2.destroyAllWindows()
# 標定
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(obj_points, img_points, size, None, None)
print("ret:", ret)
print("mtx:\n", mtx) # 內引數矩陣
print("dist:\n", dist) # 畸變系數 distortion cofficients = (k_1,k_2,p_1,p_2,k_3)
print("rvecs:\n", rvecs) # 旋轉向量 # 外引數
print("tvecs:\n", tvecs ) # 平移向量 # 外引數
print("-----------------------------------------------------")
img = cv2.imread(images[2])
h, w = img.shape[:2]
newcameramtx, roi = cv2.getOptimalNewCameraMatrix(mtx,dist,(w,h),1,(w,h))#顯示更大范圍的圖片(正常重映射之后會刪掉一部分影像)
print (newcameramtx)
print("------------------使用undistort函式-------------------")
dst = cv2.undistort(img,mtx,dist,None,newcameramtx)
x,y,w,h = roi
dst1 = dst[y:y+h,x:x+w]
cv2.imwrite('calibresult3.jpg', dst1)
print ("方法一:dst的大小為:", dst1.shape)
要過好久才能出來結果,是代碼本身的問題還是說電腦不行,跑代碼慢,求給位大佬指點。。。。。。。
uj5u.com熱心網友回復:
籠統地說是代碼問題或電腦問題 沒什么意義。先確定哪里有問題,是什么問題。
不妨試試:
把你的代碼分成若干段,插入時間點,計算出各段所用時間。
逐步縮小范圍,看哪一段或哪幾段最耗時間,再分析原因。
我只知道這個土法子,見笑了。
import time
moment0 = time.time()
# your code segment1
moment1 = time.time()
#your code segment2
moment2 = time.time()
TimeSegment1 = moment1 - moment0
TimeSegment2 = moment2 - moment1
print(TimeSegment2, TimeSegment2)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/147053.html
上一篇:pygame: 為什么if play_button.rect.collidepoint(mouse_x , mouse_y):失效
