def detect_corners(self):
self.parent.app.setOverrideCursor(qt.QCursor(qt.Qt.WaitCursor))
self.chessboard_status = []
self.chessboard_points_2D = [np.zeros([ (self.chessboard_squares_x.value() - 1)*(self.chessboard_squares_y.value() - 1),2]) for i in range(len(self.images))]
self.n_chessboard_points = (self.chessboard_squares_x.value() - 1, self.chessboard_squares_y.value() - 1 )
for imnum in range(len(self.images)):
self.status_text.setText('<b>Detecting chessboard pattern in image {:d} / {:d}...</b>'.format(imnum,len(self.images)))
self.parent.app.processEvents()
status,points = cv2.findChessboardCorners( self.images[imnum], self.n_chessboard_points, flags=cv2.CALIB_CB_ADAPTIVE_THRESH )
self.chessboard_status.append(not status)
if status:
for j,point in enumerate(points):
self.chessboard_points_2D[imnum][j,:] = point[0]
self.status_text.setText('')
self.parent.app.restoreOverrideCursor()
if np.all(self.chessboard_status):
dialog = qt.QMessageBox(self)
dialog.setStandardButtons(qt.QMessageBox.Ok)
dialog.setTextFormat(qt.Qt.RichText)
dialog.setWindowTitle('Calcam - No Chessboards Detected')
dialog.setText("No {:d} x {:d} square chessboard patterns were found in the images.".format(self.chessboard_squares_x.value(),self.chessboard_squares_y.value()))
dialog.setInformativeText("Is the number of squares set correctly?")
dialog.setIcon(qt.QMessageBox.Warning)
dialog.exec_()
elif np.any(self.chessboard_status):
dialog = qt.QMessageBox(self)
dialog.setStandardButtons(qt.QMessageBox.Ok)
dialog.setTextFormat(qt.Qt.RichText)
dialog.setWindowTitle('Calcam - Chessboard Detection')
dialog.setText("A {:d} x {:d} square chessboard pattern could not be detected in the following {:d} of {:d} images, which will therefore not be included as additional chessboard constraints:".format(self.chessboard_squares_x.value(),self.chessboard_squares_y.value(),np.count_nonzero(self.chessboard_status),len(self.images)))
dialog.setInformativeText('<br>'.join(['[#{:d}] '.format(i+1) + self.filenames[i] for i in range(len(self.filenames)) if self.chessboard_status[i] ]))
dialog.setIcon(qt.QMessageBox.Warning)
dialog.exec_()
self.chessboard_status = [not status for status in self.chessboard_status]
self.detection_run = True
self.update_image_display()
if np.any(self.chessboard_status):
self.apply_button.setEnabled(True)
self.status_text.setText('<b>Chessboard patterns detected successfully in {:d} images. Click Apply to use these in Calcam.</b>'.format(np.count_nonzero(self.chessboard_status),len(self.images)))
else:
self.apply_button.setEnabled(False)
self.status_text.setText('')
评论列表
文章目录