python IDLE运行程序要好久才能出结果

IT_CT_ICT 2020-10-01 05:15:29
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)


要过好久才能出来结果,是代码本身的问题还是说电脑不行,跑代码慢,求给位大佬指点。。。。。。。
...全文
350 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
IT_CT_ICT 2020-10-05
  • 打赏
  • 举报
回复
终于搞明白问题出在哪了,自己拍的照片太差了,得处理一下才能用
慕飒潇湘 2020-10-05
  • 打赏
  • 举报
回复
引用 2 楼 IT_CT_ICT 的回复:
谢谢啊 刚才试了一下 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(0) print(len(img_points)) cv2.destroyAllWindows() 这段代码得跑十分钟,不知道这算不算很长了 以前学简单的编程都是秒出结果, 总算知道为啥别人要买好点的电脑来跑程序了
10分钟算啥,我以前写的爬虫要跑3天才允许完,主要是数据量大
zsdhust 2020-10-03
  • 打赏
  • 举报
回复
这是在用opencv做棋盘格标定吗?
chuifengde 2020-10-02
  • 打赏
  • 举报
回复
单步调试啊,可以确定是哪一句占用时间
IT_CT_ICT 2020-10-02
  • 打赏
  • 举报
回复
谢谢啊 刚才试了一下 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(0) print(len(img_points)) cv2.destroyAllWindows() 这段代码得跑十分钟,不知道这算不算很长了 以前学简单的编程都是秒出结果, 总算知道为啥别人要买好点的电脑来跑程序了
rrrr336 2020-10-01
  • 打赏
  • 举报
回复
笼统地说是代码问题或电脑问题 没什么意义。 先确定哪里有问题,是什么问题。 不妨试试: 把你的代码分成若干段,插入时间点,计算出各段所用时间。 逐步缩小范围,看哪一段或哪几段最耗时间,再分析原因。 我只知道这个土法子,见笑了。
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)

37,721

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧