├── Screenshot 2024-04-16 021602.png ├── README.md ├── sift.py └── siftmatching.py /Screenshot 2024-04-16 021602.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Shehab-Hegab/sift/HEAD/Screenshot 2024-04-16 021602.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # sift grayscale 2 | 3 | ![Screenshot 2024-04-16 021602](https://github.com/Shehab-Hegab/sift/assets/137138481/31f740fd-53df-4140-ad74-0b8c306665b0) 4 | -------------------------------------------------------------------------------- /sift.py: -------------------------------------------------------------------------------- 1 | import cv2 2 | 3 | #sift 4 | sift = cv2.SIFT_create() 5 | 6 | #feature matching 7 | bf = cv2.BFMatcher(cv2.NORM_L2, crossCheck=True) 8 | 9 | 10 | img1 = cv2.imread('house.jpg') 11 | img2 = cv2.imread('house.jpg') 12 | 13 | img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) 14 | img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY) 15 | 16 | keypoints_1, descriptors_1 = sift.detectAndCompute(img1,None) 17 | keypoints_2, descriptors_2 = sift.detectAndCompute(img2,None) 18 | 19 | matches = bf.match(descriptors_1,descriptors_2) 20 | matches = sorted(matches, key = lambda x:x.distance) 21 | 22 | 23 | img3 = cv2.drawMatches(img1, keypoints_1, img2, keypoints_2, matches[:600], img2, flags=2) 24 | 25 | cv2.imshow('SIFT', img3) 26 | 27 | cv2.waitKey(0) -------------------------------------------------------------------------------- /siftmatching.py: -------------------------------------------------------------------------------- 1 | import cv2 2 | import matplotlib.pyplot as plt 3 | import time 4 | 5 | #sift 6 | sift = cv2.SIFT_create() 7 | 8 | #feature matching 9 | bf = cv2.BFMatcher(cv2.NORM_L2, crossCheck=True) 10 | 11 | 12 | cap = cv2.VideoCapture(0) 13 | 14 | while cap.isOpened(): 15 | # read images 16 | 17 | suc, img1 = cap.read() 18 | img2 = img1 19 | #img1 = cv2.imread('pencil3.jpg') 20 | #img2 = cv2.imread('pencil3.jpg') 21 | 22 | start = time.time() 23 | 24 | img1 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) 25 | img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY) 26 | 27 | keypoints_1, descriptors_1 = sift.detectAndCompute(img1,None) 28 | keypoints_2, descriptors_2 = sift.detectAndCompute(img2,None) 29 | 30 | matches = bf.match(descriptors_1,descriptors_2) 31 | matches = sorted(matches, key = lambda x:x.distance) 32 | 33 | end = time.time() 34 | totalTime = end - start 35 | 36 | fps = 1 / totalTime 37 | #print("FPS: ", fps) 38 | 39 | 40 | img3 = cv2.drawMatches(img1, keypoints_1, img2, keypoints_2, matches[:300], img2, flags=2) 41 | #plt.imshow(img3),plt.show() 42 | cv2.putText(img3, f'FPS: {int(fps)}', (20,450), cv2.FONT_HERSHEY_SIMPLEX, 1.5, (0,255,0), 2) 43 | cv2.imshow('SIFT', img3) 44 | 45 | if cv2.waitKey(5) & 0xFF == 27: 46 | break 47 | 48 | 49 | cap.release() --------------------------------------------------------------------------------