Python cv2.TERM_CRITERIA_MAX_ITER Examples
The following are 30
code examples of cv2.TERM_CRITERIA_MAX_ITER().
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
You may also want to check out all available functions/classes of the module
cv2
, or try the search function
.
Example #1
Source File: k_means_color_quantization.py From Mastering-OpenCV-4-with-Python with MIT License | 10 votes |
def color_quantization(image, k): """Performs color quantization using K-means clustering algorithm""" # Transform image into 'data': data = np.float32(image).reshape((-1, 3)) # print(data.shape) # Define the algorithm termination criteria (the maximum number of iterations and/or the desired accuracy): # In this case the maximum number of iterations is set to 20 and epsilon = 1.0 criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 20, 1.0) # Apply K-means clustering algorithm: ret, label, center = cv2.kmeans(data, k, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS) # At this point we can make the image with k colors # Convert center to uint8: center = np.uint8(center) # Replace pixel values with their center value: result = center[label.flatten()] result = result.reshape(img.shape) return result # Create the dimensions of the figure and set title:
Example #2
Source File: inklings_tracker.py From IkaLog with Apache License 2.0 | 7 votes |
def _detect_team_color(self, pixels): criteria = \ (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0) pixels = np.array(pixels.reshape((-1, 3)), dtype=np.float32) ret, label, center = cv2.kmeans( pixels, 2, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS) # one is black, another is the team color. colors = np.array(center, dtype=np.uint8).reshape((1, 2, 3)) colors_hsv = cv2.cvtColor(colors, cv2.COLOR_BGR2HSV) x = np.argmax(colors_hsv[:, :, 2]) team_color_bgr = colors[0, x, :] team_color_hsv = colors_hsv[0, x, :] return { 'rgb': cv2.cvtColor(colors, cv2.COLOR_BGR2RGB).tolist()[0][x], 'hsv': cv2.cvtColor(colors, cv2.COLOR_BGR2HSV).tolist()[0][x], }
Example #3
Source File: markerfunctions.py From SaltwashAR with GNU General Public License v3.0 | 7 votes |
def get_vectors(image, points, mtx, dist): # order points points = _order_points(points) # set up criteria, image, points and axis criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) imgp = np.array(points, dtype='float32') objp = np.array([[0.,0.,0.],[1.,0.,0.], [1.,1.,0.],[0.,1.,0.]], dtype='float32') # calculate rotation and translation vectors cv2.cornerSubPix(gray,imgp,(11,11),(-1,-1),criteria) rvecs, tvecs, _ = cv2.solvePnPRansac(objp, imgp, mtx, dist) return rvecs, tvecs
Example #4
Source File: ml.py From HUAWEIOCR-2019 with MIT License | 6 votes |
def kmeans(samples, k, criteria = None, attempts = 3, flags = None): import cv2 if flags == None: flags = cv2.KMEANS_RANDOM_CENTERS if criteria == None: criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0) samples = np.asarray(samples, dtype = np.float32) _,labels,centers = cv2.kmeans(samples, k, criteria, attempts, flags) labels = util.np.flatten(labels) clusters = [None]*k for idx, label in enumerate(labels): if clusters[label] is None: clusters[label] = [] clusters[label].append(idx) for idx, cluster in enumerate(clusters): if cluster == None: logging.warn('Empty cluster appeared.') clusters[idx] = [] return labels, clusters, centers
Example #5
Source File: ml.py From HUAWEIOCR-2019 with MIT License | 6 votes |
def kmeans(samples, k, criteria = None, attempts = 3, flags = None): import cv2 if flags == None: flags = cv2.KMEANS_RANDOM_CENTERS if criteria == None: criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0) samples = np.asarray(samples, dtype = np.float32) _,labels,centers = cv2.kmeans(samples, k, criteria, attempts, flags) labels = util.np.flatten(labels) clusters = [None]*k for idx, label in enumerate(labels): if clusters[label] is None: clusters[label] = [] clusters[label].append(idx) for idx, cluster in enumerate(clusters): if cluster == None: logging.warn('Empty cluster appeared.') clusters[idx] = [] return labels, clusters, centers
Example #6
Source File: ml.py From HUAWEIOCR-2019 with MIT License | 6 votes |
def kmeans(samples, k, criteria = None, attempts = 3, flags = None): import cv2 if flags == None: flags = cv2.KMEANS_RANDOM_CENTERS if criteria == None: criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0) samples = np.asarray(samples, dtype = np.float32) _,labels,centers = cv2.kmeans(samples, k, criteria, attempts, flags) labels = util.np.flatten(labels) clusters = [None]*k for idx, label in enumerate(labels): if clusters[label] is None: clusters[label] = [] clusters[label].append(idx) for idx, cluster in enumerate(clusters): if cluster == None: logging.warn('Empty cluster appeared.') clusters[idx] = [] return labels, clusters, centers
Example #7
Source File: marker.py From BAR4Py with MIT License | 6 votes |
def calculateCorners(self, gray, points=None): ''' gray is OpenCV gray image, points is Marker.points >>> marker.calculateCorners(gray) >>> print(marker.corners) ''' if points is None: points = self.points if points is None: raise TypeError('calculateCorners need a points value') ''' rotations = 0 -> 0,1,2,3 rotations = 1 -> 3,0,1,2 rotations = 2 -> 2,3,0,1 rotations = 3 -> 1,2,3,0 => A: 1,0,3,2; B: 0,3,2,1; C: 2,1,0,3; D: 3,2,1,0 ''' i = self.rotations A = (1,0,3,2)[i]; B = (0,3,2,1)[i]; C = (2,1,0,3)[i]; D = (3,2,1,0)[i] corners = np.float32([points[A], points[B], points[C], points[D]]) criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.1) self.corners = cv2.cornerSubPix(gray, corners, (5,5), (-1,-1), criteria)
Example #8
Source File: marker.py From BAR4Py with MIT License | 6 votes |
def calculateCorners(self, gray, points=None): ''' gray is OpenCV gray image, points is Marker.points >>> marker.calculateCorners(gray) >>> print(marker.corners) ''' if points is None: points = self.points if points is None: raise TypeError('calculateCorners need a points value') ''' rotations = 0 -> 0,1,2,3 rotations = 1 -> 3,0,1,2 rotations = 2 -> 2,3,0,1 rotations = 3 -> 1,2,3,0 => A: 1,0,3,2; B: 0,3,2,1; C: 2,1,0,3; D: 3,2,1,0 ''' i = self.rotations A = (1,0,3,2)[i]; B = (0,3,2,1)[i]; C = (2,1,0,3)[i]; D = (3,2,1,0)[i] corners = np.float32([points[A], points[B], points[C], points[D]]) criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.1) self.corners = cv2.cornerSubPix(gray, corners, (5,5), (-1,-1), criteria)
Example #9
Source File: marker.py From BAR4Py with MIT License | 6 votes |
def calculateCorners(self, gray, points=None): ''' gray is OpenCV gray image, points is Marker.points >>> marker.calculateCorners(gray) >>> print(marker.corners) ''' if points is None: points = self.points if points is None: raise TypeError('calculateCorners need a points value') ''' rotations = 0 -> 0,1,2,3 rotations = 1 -> 3,0,1,2 rotations = 2 -> 2,3,0,1 rotations = 3 -> 1,2,3,0 => A: 1,0,3,2; B: 0,3,2,1; C: 2,1,0,3; D: 3,2,1,0 ''' i = self.rotations A = (1,0,3,2)[i]; B = (0,3,2,1)[i]; C = (2,1,0,3)[i]; D = (3,2,1,0)[i] corners = np.float32([points[A], points[B], points[C], points[D]]) criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.1) self.corners = cv2.cornerSubPix(gray, corners, (5,5), (-1,-1), criteria)
Example #10
Source File: marker.py From BAR4Py with MIT License | 6 votes |
def calculateCorners(self, gray, points=None): ''' gray is OpenCV gray image, points is Marker.points >>> marker.calculateCorners(gray) >>> print(marker.corners) ''' if points is None: points = self.points if points is None: raise TypeError('calculateCorners need a points value') ''' rotations = 0 -> 0,1,2,3 rotations = 1 -> 3,0,1,2 rotations = 2 -> 2,3,0,1 rotations = 3 -> 1,2,3,0 => A: 1,0,3,2; B: 0,3,2,1; C: 2,1,0,3; D: 3,2,1,0 ''' i = self.rotations A = (1,0,3,2)[i]; B = (0,3,2,1)[i]; C = (2,1,0,3)[i]; D = (3,2,1,0)[i] corners = np.float32([points[A], points[B], points[C], points[D]]) criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.1) self.corners = cv2.cornerSubPix(gray, corners, (5,5), (-1,-1), criteria)
Example #11
Source File: util.py From hdidx with MIT License | 5 votes |
def kmeans(vs, ks, niter): criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, niter, 0.01) flags = cv2.KMEANS_RANDOM_CENTERS compactness, labels, centers = cv2.kmeans( vs, ks, criteria, 1, flags) return centers
Example #12
Source File: 3D_Cube.py From PyCV-time with MIT License | 5 votes |
def cube(img): #img_in = cv2.imread("Picture 27.jpg") #img = cv2.resize(img_in,None,fx=0.5, fy=0.5, interpolation = cv2.INTER_CUBIC) #cv2.imshow('img',img) gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #cv2.imshow('gray',gray) ret, corners = cv2.findChessboardCorners(gray, (8,7),None) # print ret,corners criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001) objp = np.zeros((7*8,3), np.float32) objp[:,:2] = np.mgrid[0:8,0:7].T.reshape(-1,2) #axis = np.float32([[3,0,0], [0,3,0], [0,0,-3]]).reshape(-1,3) axis = np.float32([[0,0,0], [0,3,0], [3,3,0], [3,0,0], [0,0,-3],[0,3,-3],[3,3,-3],[3,0,-3] ]) if ret == True: cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria) # Find the rotation and translation vectors. rvecs, tvecs, inliers = cv2.solvePnPRansac(objp, corners, mtx, dist) # project 3D points to image plane imgpts, jac = cv2.projectPoints(axis, rvecs, tvecs, mtx, dist) #print imgpts img = draw2(img,corners,imgpts) return img
Example #13
Source File: k_means.py From Image-stitcher with MIT License | 5 votes |
def k_means(points: np.ndarray): """返回一个数组经kmeans分类后的k值以及标签,k值由计算拐点给出 Args: points (np.ndarray): 需分类数据 Returns: Tuple[int, np.ndarry]: k值以及标签数组 """ # Define criteria = ( type, max_iter = 10 , epsilon = 1.0 ) criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0) # Set flags (Just to avoid line break in the code) flags = cv2.KMEANS_RANDOM_CENTERS length = [] max_k = min(10, points.shape[0]) for k in range(2, max_k + 1): avg = 0 for i in range(5): compactness, _, _ = cv2.kmeans( points, k, None, criteria, 10, flags) avg += compactness avg /= 5 length.append(avg) peek_pos = find_peek(length) k = peek_pos + 2 # print(k) return k, cv2.kmeans(points, k, None, criteria, 10, flags)[1] # labels
Example #14
Source File: svm_handwritten_digits_recognition_preprocessing_hog.py From Mastering-OpenCV-4-with-Python with MIT License | 5 votes |
def svm_init(C=12.5, gamma=0.50625): """Creates empty model and assigns main parameters""" model = cv2.ml.SVM_create() model.setGamma(gamma) model.setC(C) model.setKernel(cv2.ml.SVM_RBF) model.setType(cv2.ml.SVM_C_SVC) model.setTermCriteria((cv2.TERM_CRITERIA_MAX_ITER, 100, 1e-6)) return model
Example #15
Source File: svm_introduction.py From Mastering-OpenCV-4-with-Python with MIT License | 5 votes |
def svm_init(C=12.5, gamma=0.50625): """Creates empty model and assigns main parameters""" model = cv2.ml.SVM_create() model.setGamma(gamma) model.setC(C) model.setKernel(cv2.ml.SVM_LINEAR) model.setType(cv2.ml.SVM_C_SVC) model.setTermCriteria((cv2.TERM_CRITERIA_MAX_ITER, 100, 1e-6)) return model
Example #16
Source File: svm_handwritten_digits_recognition_preprocessing_hog_c_gamma.py From Mastering-OpenCV-4-with-Python with MIT License | 5 votes |
def svm_init(C=12.5, gamma=0.50625): """Creates empty model and assigns main parameters""" model = cv2.ml.SVM_create() model.setGamma(gamma) model.setC(C) model.setKernel(cv2.ml.SVM_RBF) model.setType(cv2.ml.SVM_C_SVC) model.setTermCriteria((cv2.TERM_CRITERIA_MAX_ITER, 100, 1e-6)) return model
Example #17
Source File: calibration.py From StereoVision with GNU General Public License v3.0 | 5 votes |
def _get_corners(self, image): """Find subpixel chessboard corners in image.""" temp = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) ret, corners = cv2.findChessboardCorners(temp, (self.rows, self.columns)) if not ret: raise ChessboardNotFoundError("No chessboard could be found.") cv2.cornerSubPix(temp, corners, (11, 11), (-1, -1), (cv2.TERM_CRITERIA_MAX_ITER + cv2.TERM_CRITERIA_EPS, 30, 0.01)) return corners
Example #18
Source File: test_monkey.py From ATX with Apache License 2.0 | 5 votes |
def test_kmeans(img): ## K均值聚类 z = img.reshape((-1, 3)) z = np.float32(z) criteria = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0) ret, label, center = cv2.kmeans(z, 20, criteria, 10, cv2.KMEANS_RANDOM_CENTERS) center = np.uint8(center) res = center[label.flatten()] res2 = res.reshape((img.shape)) cv2.imshow('preview', res2) cv2.waitKey()
Example #19
Source File: filter.py From Walk-Assistant with GNU General Public License v3.0 | 5 votes |
def color_quantization(img, n_cluster, iteration, epsilon=1.0): Z = img.reshape((-1, 3)) Z = np.float32(Z) criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, iteration, epsilon) ret, label, center = cv2.kmeans(Z, n_cluster, None, criteria, iteration, cv2.KMEANS_PP_CENTERS) labels = label.reshape((img.shape[0], img.shape[1], 1)) # center = np.uint(center) # visual = center[label.flatten()] # visual = visual.reshape(img.shape) # visual = np.uint8(visual) return labels
Example #20
Source File: img_util.py From CvStudio with MIT License | 5 votes |
def kmeans(array: np.ndarray, k: int = 3): n_channels = 3 if len(np.shape(array)) == 3 else 1 arr_values = array.reshape((-1, n_channels)) arr_values = np.float32(arr_values) criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.2) _, labels, (centers) = cv2.kmeans(arr_values, k, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS) centers = np.uint8(centers) clustered_arr = centers[labels.flatten()] clustered_arr = clustered_arr.reshape(array.shape) return clustered_arr
Example #21
Source File: process.py From lowpolypy with MIT License | 5 votes |
def get_dominant_color(pixels, clusters, attempts): """ Given a (N, Channels) array of pixel values, compute the dominant color via K-means """ clusters = min(clusters, len(pixels)) flags = cv2.KMEANS_RANDOM_CENTERS criteria = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_MAX_ITER, 1, 10) _, labels, centroids = cv2.kmeans(pixels.astype(np.float32), clusters, None, criteria, attempts, flags) _, counts = np.unique(labels, return_counts=True) dominant = centroids[np.argmax(counts)] return dominant
Example #22
Source File: calibrate_camera.py From derplearning with MIT License | 5 votes |
def live_calibrate(camera, pattern_shape, n_matches_needed): """ Find calibration parameters as the user moves a checkerboard in front of the camera """ print("Looking for %s checkerboard" % (pattern_shape,)) criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001) example_3d = np.zeros((pattern_shape[0] * pattern_shape[1], 3), np.float32) example_3d[:, :2] = np.mgrid[0 : pattern_shape[1], 0 : pattern_shape[0]].T.reshape(-1, 2) points_3d = [] points_2d = [] while len(points_3d) < n_matches_needed: ret, frame = camera.cap.read() assert ret gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) ret, corners = cv2.findCirclesGrid( gray_frame, pattern_shape, flags=cv2.CALIB_CB_ASYMMETRIC_GRID ) cv2.imshow("camera", frame) if ret: points_3d.append(example_3d.copy()) points_2d.append(corners) print("Found calibration %i of %i" % (len(points_3d), n_matches_needed)) drawn_frame = cv2.drawChessboardCorners(frame, pattern_shape, corners, ret) cv2.imshow("calib", drawn_frame) cv2.waitKey(10) ret, camera_matrix, distortion_coefficients, _, _ = cv2.calibrateCamera( points_3d, points_2d, gray_frame.shape[::-1], None, None ) assert ret return camera_matrix, distortion_coefficients
Example #23
Source File: utils.py From cvcalib with Apache License 2.0 | 4 votes |
def calibrate_intrinsics(camera, image_points, object_points, use_rational_model=True, use_tangential=False, use_thin_prism=False, fix_radial=False, fix_thin_prism=False, max_iterations=30, use_existing_guess=False, test=False): flags = 0 if test: flags = flags | cv2.CALIB_USE_INTRINSIC_GUESS # fix everything flags = flags | cv2.CALIB_FIX_PRINCIPAL_POINT flags = flags | cv2.CALIB_FIX_ASPECT_RATIO flags = flags | cv2.CALIB_FIX_FOCAL_LENGTH # apparently, we can't fix the tangential distance. What the hell? Zero it out. flags = flags | cv2.CALIB_ZERO_TANGENT_DIST flags = fix_radial_flags(flags) flags = flags | cv2.CALIB_FIX_S1_S2_S3_S4 criteria = (cv2.TERM_CRITERIA_MAX_ITER, 1, 0) else: if fix_radial: flags = fix_radial_flags(flags) if fix_thin_prism: flags = flags | cv2.CALIB_FIX_S1_S2_S3_S4 criteria = (cv2.TERM_CRITERIA_MAX_ITER + cv2.TERM_CRITERIA_EPS, max_iterations, 2.2204460492503131e-16) if use_existing_guess: flags = flags | cv2.CALIB_USE_INTRINSIC_GUESS if not use_tangential: flags = flags | cv2.CALIB_ZERO_TANGENT_DIST if use_rational_model: flags = flags | cv2.CALIB_RATIONAL_MODEL if len(camera.intrinsics.distortion_coeffs) < 8: camera.intrinsics.distortion_coeffs.resize((8,)) if use_thin_prism: flags = flags | cv2.CALIB_THIN_PRISM_MODEL if len(camera.intrinsics.distortion_coeffs) != 12: camera.intrinsics.distortion_coeffs = np.resize(camera.intrinsics.distortion_coeffs, (12,)) return __calibrate_intrinsics(camera, image_points, object_points, flags, criteria)
Example #24
Source File: getPMatrix.py From AR-BXT-AR4Python with GNU Lesser General Public License v3.0 | 4 votes |
def getP(self, dst): """ dst: 标记物关键点 return self.MTX,self.DIST,self.RVEC,self.TVEC: 反馈 内参、畸变系数,旋转向量,位移向量 """ if self.SceneImage is None: return None corners = np.float32([dst[1], dst[0], dst[2], dst[3]]) gray = cv2.cvtColor(self.SceneImage, cv2.COLOR_BGR2GRAY) # termination criteria criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001) # prepare object points, like (0,0,0), (1,0,0), (1,0,0), (1,1,0) objp = np.zeros((2*2,3), np.float32) objp[:,:2] = np.mgrid[0:2,0:2].T.reshape(-1,2) corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria) if self.PTimes < self.PCount or self.PCount == 0: # Arrays to store object points and image points from all the images. objpoints = self.OBJPoints # 3d point in real world space imgpoints = self.IMGPoints # 2d points in image plane. if len(imgpoints) == 0 or np.sum(np.abs(imgpoints[-1] - corners2)) != 0: objpoints.append(objp) imgpoints.append(corners2) # Find mtx, dist, rvecs, tvecs ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1],None,None) if not ret: self.PTimes += 1 return None self.OBJPoints = objpoints self.IMGPoints = imgpoints self.MTX = mtx self.DIST = dist self.RVEC = rvecs[0] self.TVEC = tvecs[0] else: # Find the rotation and translation vectors. _, rvec, tvec, _= cv2.solvePnPRansac(objp, corners2, self.MTX, self.DIST) self.RVEC = rvec self.TVEC = tvec self.PTimes += 1 return self.MTX,self.DIST,self.RVEC,self.TVEC
Example #25
Source File: getPMatrix.py From AR-BXT-AR4Python with GNU Lesser General Public License v3.0 | 4 votes |
def getP(self, dst): """ dst: 标记物关键点 return self.MTX,self.DIST,self.RVEC,self.TVEC: 反馈 内参、畸变系数,旋转向量,位移向量 """ if self.SceneImage is None: return None corners = np.float32([dst[1], dst[0], dst[2], dst[3]]) gray = cv2.cvtColor(self.SceneImage, cv2.COLOR_BGR2GRAY) # termination criteria criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001) # prepare object points, like (0,0,0), (1,0,0), (1,0,0), (1,1,0) objp = np.zeros((2*2,3), np.float32) objp[:,:2] = np.mgrid[0:2,0:2].T.reshape(-1,2) corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria) if self.PTimes < self.PCount or self.PCount == 0: # Arrays to store object points and image points from all the images. objpoints = self.OBJPoints # 3d point in real world space imgpoints = self.IMGPoints # 2d points in image plane. if len(imgpoints) == 0 or np.sum(np.abs(imgpoints[-1] - corners2)) != 0: objpoints.append(objp) imgpoints.append(corners2) # Find mtx, dist, rvecs, tvecs ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1],None,None) if not ret: self.PTimes += 1 return None self.OBJPoints = objpoints self.IMGPoints = imgpoints self.MTX = mtx self.DIST = dist self.RVEC = rvecs[0] self.TVEC = tvecs[0] else: # Find the rotation and translation vectors. _, rvec, tvec, _= cv2.solvePnPRansac(objp, corners2, self.MTX, self.DIST) self.RVEC = rvec self.TVEC = tvec self.PTimes += 1 return self.MTX,self.DIST,self.RVEC,self.TVEC
Example #26
Source File: calibration.py From StereoVision with GNU General Public License v3.0 | 4 votes |
def calibrate_cameras(self): """Calibrate cameras based on found chessboard corners.""" criteria = (cv2.TERM_CRITERIA_MAX_ITER + cv2.TERM_CRITERIA_EPS, 100, 1e-5) flags = (cv2.CALIB_FIX_ASPECT_RATIO + cv2.CALIB_ZERO_TANGENT_DIST + cv2.CALIB_SAME_FOCAL_LENGTH) calib = StereoCalibration() (calib.cam_mats["left"], calib.dist_coefs["left"], calib.cam_mats["right"], calib.dist_coefs["right"], calib.rot_mat, calib.trans_vec, calib.e_mat, calib.f_mat) = cv2.stereoCalibrate(self.object_points, self.image_points["left"], self.image_points["right"], self.image_size, calib.cam_mats["left"], calib.dist_coefs["left"], calib.cam_mats["right"], calib.dist_coefs["right"], calib.rot_mat, calib.trans_vec, calib.e_mat, calib.f_mat, criteria=criteria, flags=flags)[1:] (calib.rect_trans["left"], calib.rect_trans["right"], calib.proj_mats["left"], calib.proj_mats["right"], calib.disp_to_depth_mat, calib.valid_boxes["left"], calib.valid_boxes["right"]) = cv2.stereoRectify(calib.cam_mats["left"], calib.dist_coefs["left"], calib.cam_mats["right"], calib.dist_coefs["right"], self.image_size, calib.rot_mat, calib.trans_vec, flags=0) for side in ("left", "right"): (calib.undistortion_map[side], calib.rectification_map[side]) = cv2.initUndistortRectifyMap( calib.cam_mats[side], calib.dist_coefs[side], calib.rect_trans[side], calib.proj_mats[side], self.image_size, cv2.CV_32FC1) # This is replaced because my results were always bad. Estimates are # taken from the OpenCV samples. width, height = self.image_size focal_length = 0.8 * width calib.disp_to_depth_mat = np.float32([[1, 0, 0, -0.5 * width], [0, -1, 0, 0.5 * height], [0, 0, 0, -focal_length], [0, 0, 1, 0]]) return calib
Example #27
Source File: k_means_color_quantization_distribution.py From Mastering-OpenCV-4-with-Python with MIT License | 4 votes |
def color_quantization(image, k): """Performs color quantization using K-means clustering algorithm""" # Transform image into 'data': data = np.float32(image).reshape((-1, 3)) # print(data.shape) # Define the algorithm termination criteria (the maximum number of iterations and/or the desired accuracy): # In this case the maximum number of iterations is set to 20 and epsilon = 1.0 criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 20, 1.0) # Apply K-means clustering algorithm: ret, label, center = cv2.kmeans(data, k, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS) # At this point we can make the image with k colors # Convert center to uint8: center = np.uint8(center) # Replace pixel values with their center value: result = center[label.flatten()] result = result.reshape(img.shape) # Build the 'color_distribution' legend. # We will use the number of pixels assigned to each center value: counter = collections.Counter(label.flatten()) print(counter) # Calculate the total number of pixels of the input image: total = img.shape[0] * img.shape[1] # Assign width and height to the color_distribution image: desired_width = img.shape[1] # The difference between 'desired_height' and 'desired_height_colors' # will be the separation between the images desired_height = 70 desired_height_colors = 50 # Initialize the color_distribution image: color_distribution = np.ones((desired_height, desired_width, 3), dtype="uint8") * 255 # Initialize start: start = 0 for key, value in counter.items(): # Calculate the normalized value: value_normalized = value / total * desired_width # Move end to the right position: end = start + value_normalized # Draw rectangle corresponding to the current color: cv2.rectangle(color_distribution, (int(start), 0), (int(end), desired_height_colors), center[key].tolist(), -1) # Update start: start = end return np.vstack((color_distribution, result)) # Create the dimensions of the figure and set title:
Example #28
Source File: image.py From perception with Apache License 2.0 | 4 votes |
def find_chessboard(self, sx=6, sy=9): """Finds the corners of an sx X sy chessboard in the image. Parameters ---------- sx : int Number of chessboard corners in x-direction. sy : int Number of chessboard corners in y-direction. Returns ------- :obj:`list` of :obj:`numpy.ndarray` A list containing the 2D points of the corners of the detected chessboard, or None if no chessboard found. """ # termination criteria criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001) # prepare object points, like (0,0,0), (1,0,0), (2,0,0) ....,(6,5,0) objp = np.zeros((sx * sy, 3), np.float32) objp[:, :2] = np.mgrid[0:sx, 0:sy].T.reshape(-1, 2) # Arrays to store object points and image points from all the images. objpoints = [] # 3d point in real world space imgpoints = [] # 2d points in image plane. # create images img = self.data.astype(np.uint8) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # Find the chess board corners ret, corners = cv2.findChessboardCorners(gray, (sx, sy), None) # If found, add object points, image points (after refining them) if ret: objpoints.append(objp) cv2.cornerSubPix(gray, corners, (11, 11), (-1, -1), criteria) imgpoints.append(corners) if corners is not None: return corners.squeeze() return None
Example #29
Source File: loaders.py From hfnet with MIT License | 4 votes |
def export_loader(image, name, experiment, **config): has_keypoints = config.get('has_keypoints', True) has_descriptors = config.get('has_descriptors', True) num_features = config.get('num_features', 0) remove_borders = config.get('remove_borders', 0) keypoint_predictor = config.get('keypoint_predictor', None) do_nms = config.get('do_nms', False) nms_thresh = config.get('nms_thresh', 4) keypoint_refinement = config.get('keypoint_refinement', False) binarize = config.get('binarize', False) entries = ['keypoints', 'scores', 'descriptors', 'local_descriptors'] name = name.decode('utf-8') if isinstance(name, bytes) else name path = Path(EXPER_PATH, 'exports', experiment, name+'.npz') with np.load(path) as p: pred = {k: v.copy() for k, v in p.items()} image_shape = image.shape[:2] if keypoint_predictor: keypoint_config = config.get('keypoint_config', config) keypoint_config['keypoint_predictor'] = None pred_detector = keypoint_predictor( image, name, **{'experiment': experiment, **keypoint_config}) pred['keypoints'] = pred_detector['keypoints'] pred['scores'] = pred_detector['scores'] elif has_keypoints: assert 'keypoints' in pred if remove_borders: mask = keypoints_filter_borders( pred['keypoints'], image_shape, remove_borders) pred = {**pred, **{k: v[mask] for k, v in pred.items() if k in entries}} if do_nms: keep = nms_fast( pred['keypoints'], pred['scores'], image_shape, nms_thresh) pred = {**pred, **{k: v[keep] for k, v in pred.items() if k in entries}} if keypoint_refinement: criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001) pred['keypoints'] = cv2.cornerSubPix( image, np.float32(pred['keypoints']), (3, 3), (-1, -1), criteria) if num_features: keep = np.argsort(pred['scores'])[::-1][:num_features] pred = {**pred, **{k: v[keep] for k, v in pred.items() if k in entries}} if has_descriptors: if 'descriptors' in pred: pass elif 'local_descriptors' in pred: pred['descriptors'] = pred['local_descriptors'] else: assert 'local_descriptor_map' in pred pred['descriptors'] = sample_descriptors( pred['local_descriptor_map'], pred['keypoints'], image_shape, input_shape=pred['input_shape'][:2] if 'input_shape' in pred else None) if binarize: pred['descriptors'] = pred['descriptors'] > 0 return pred
Example #30
Source File: calibration_utils.py From depthai with MIT License | 4 votes |
def process_images(self, filepath): """Read images, detect corners, refine corners, and save data.""" # Arrays to store object points and image points from all the images. self.objpoints = [] # 3d point in real world space self.imgpoints_l = [] # 2d points in image plane. self.imgpoints_r = [] # 2d points in image plane. self.calib_successes = [] # polygon ids of left/right image sets with checkerboard corners. images_left = glob.glob(filepath + "/left/*") images_right = glob.glob(filepath + "/right/*") images_left.sort() images_right.sort() print("\nAttempting to read images for left camera from dir: " + filepath + "/left/") print("Attempting to read images for right camera from dir: " + filepath + "/right/") assert len(images_left) != 0, "ERROR: Images not read correctly, check directory" assert len(images_right) != 0, "ERROR: Images not read correctly, check directory" for image_left, image_right in zip(images_left, images_right): img_l = cv2.imread(image_left, 0) img_r = cv2.imread(image_right, 0) assert img_l is not None, "ERROR: Images not read correctly" assert img_r is not None, "ERROR: Images not read correctly" print("Finding chessboard corners for %s and %s..." % (os.path.basename(image_left), os.path.basename(image_right))) start_time = time.time() # Find the chess board corners flags = 0 flags |= cv2.CALIB_CB_ADAPTIVE_THRESH flags |= cv2.CALIB_CB_NORMALIZE_IMAGE ret_l, corners_l = cv2.findChessboardCorners(img_l, (9, 6), flags) ret_r, corners_r = cv2.findChessboardCorners(img_r, (9, 6), flags) # termination criteria self.criteria = (cv2.TERM_CRITERIA_MAX_ITER + cv2.TERM_CRITERIA_EPS, 30, 0.001) # if corners are found in both images, refine and add data if ret_l and ret_r: self.objpoints.append(self.objp) rt = cv2.cornerSubPix(img_l, corners_l, (5, 5), (-1, -1), self.criteria) self.imgpoints_l.append(corners_l) rt = cv2.cornerSubPix(img_r, corners_r, (5, 5), (-1, -1), self.criteria) self.imgpoints_r.append(corners_r) self.calib_successes.append(polygon_from_image_name(image_left)) print("\t[OK]. Took %i seconds." % (round(time.time() - start_time, 2))) else: print("\t[ERROR] - Corners not detected. Took %i seconds." % (round(time.time() - start_time, 2))) self.img_shape = img_r.shape[::-1] print(str(len(self.objpoints)) + " of " + str(len(images_left)) + " images being used for calibration") self.ensure_valid_images()