Γειά σας, έχουμε κατασκευάσει τον παρακάτω κώδικα, ο οποίος εμφανίζει την 3-Δ εικόνα από δύο σχετικά προσανατολισμένες εικόνες. Αυτό που θέλουμε ακόμα να κάνουμε είναι να μπορέσουμε να αλλάξουμε την θέση των 2 εικόνων (μπλέ και κόκκινη) με το δεξί και αριστερό βελάκι του πληκτρολογίου προκειμένου να γίνει εφικτή η τρισδιάστατη παρατήρηση.
Παρακάτω σας παραθέτουμε τον κώδικα που έχουμε φτιάξει μέχρι στιγμής.
Ευχαριστούμε εκ των προτέρων για την βοήθειά σας.
import cv2
import numpy as np
def drawlines(img1,img2,lines,pts1,pts2):
''' img1 - image on which we draw the epilines for the points in img1
lines - corresponding epilines '''
r,c = img1.shape
img1 = cv2.cvtColor(img1,cv2.COLOR_GRAY2BGR)
img2 = cv2.cvtColor(img2,cv2.COLOR_GRAY2BGR)
for r,pt1,pt2 in zip(lines,pts1,pts2):
color = tuple(np.random.randint(0,255,3).tolist())
x0,y0 = map(int, [0, -r[2]/r[1] ])
x1,y1 = map(int, [c, -(r[2]+r[0]*c)/r[1] ])
img1 = cv2.line(img1, (x0,y0), (x1,y1), color,1)
img1 = cv2.circle(img1,tuple(pt1),5,color,-1)
img2 = cv2.circle(img2,tuple(pt2),5,color,-1)
return img1,img2
img1 = cv2.imread('C:\\Python27\\tsakuba\\tsukuba_l.png',0) # queryimage
img2 = cv2.imread('C:\\Python27\\tsakuba\\tsukuba_r.png',0) #trainimage
sift = cv2.SIFT()
# find the keypoints and descriptors with SIFT
kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)
# FLANN parameters
FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
search_params = dict(checks=50) # or pass empty dictionary
flann = cv2.FlannBasedMatcher(index_params,search_params)
matches = flann.knnMatch(des1,des2,k=2)
good = []
pts1 = []
pts2 = []
# ratio test as per Lowe's paper
for i,(m,n) in enumerate(matches):
if m.distance < 0.5*n.distance:
good.append(m)
pts2.append(kp2[m.trainIdx].pt)
pts1.append(kp1[m.queryIdx].pt)
pts2 = np.float32(pts2)
pts1 = np.float32(pts1)
F, mask = cv2.findFundamentalMat(pts1,pts2,cv2.FM_8POINT)
# We select only first 15 points
pts1 = pts1[mask.ravel()==1]
pts2 = pts2[mask.ravel()==1]
pts1 = pts1.reshape((pts1.shape[0] * 2, 1))
pts2 = pts1.reshape((pts2.shape[0] * 2, 1))
retval,H1,H2=cv2.stereoRectifyUncalibrated(pts1, pts2, F,(384,288))
tsukuba_l1=cv2.copyMakeBorder(img1,1,1,1,1,cv2.BORDER_REPLICATE)
tsukuba_r1=cv2.copyMakeBorder(img2,1,1,1,1,cv2.BORDER_REPLICATE)
tsukuba_l1=cv2.warpPerspective(img1, H1,(384,288))
tsukuba_r1=cv2.warpPerspective(img2, H2,(384,288))
cv2.imshow('tsukuba_l',tsukuba_l1)
cv2.imshow('tsukuba_r',tsukuba_r1)
cv2.imwrite('tsukuba_l1.png',tsukuba_l1)
cv2.imwrite('tsukuba_r1.png',tsukuba_r1)
imgl1 = cv2.imread('C:\\Python27\\tsakuba\\tsukuba_l.png',0)
imgr1 = cv2.imread('C:\\Python27\\tsakuba\\tsukuba_r.png',0)
stereo = cv2.StereoBM(cv2.STEREO_BM_BASIC_PRESET,ndisparities=16, SADWindowSize=211)
disparity = stereo.compute(imgl1,imgr1)
cv2.imwrite('depth.jpg',disparity)
imgL = cv2.cvtColor(imgl1,cv2.COLOR_GRAY2BGR)
cv2.imwrite('Lcolor.png',imgL)
imgR = cv2.cvtColor(imgr1,cv2.COLOR_GRAY2BGR)
cv2.imwrite('Rcolor.png',imgR)
rl,gl,bl = cv2.split(imgL)
rr,gr,br = cv2.split(imgR)
imgstereo=cv2.merge((rl,gl,br))
cv2.imshow('stereo',imgstereo)
cv2.waitKey(0)