Deleted all trailing whitespace.
This commit is contained in:
@@ -8,51 +8,51 @@ import sys
|
||||
def shift_dft(src, dst=None):
|
||||
'''
|
||||
Rearrange the quadrants of Fourier image so that the origin is at
|
||||
the image center. Swaps quadrant 1 with 3, and 2 with 4.
|
||||
|
||||
the image center. Swaps quadrant 1 with 3, and 2 with 4.
|
||||
|
||||
src and dst arrays must be equal size & type
|
||||
'''
|
||||
|
||||
|
||||
if dst is None:
|
||||
dst = np.empty(src.shape, src.dtype)
|
||||
elif src.shape != dst.shape:
|
||||
raise ValueError("src and dst must have equal sizes")
|
||||
elif src.dtype != dst.dtype:
|
||||
raise TypeError("src and dst must have equal types")
|
||||
|
||||
|
||||
if src is dst:
|
||||
ret = np.empty(src.shape, src.dtype)
|
||||
else:
|
||||
ret = dst
|
||||
|
||||
|
||||
h, w = src.shape[:2]
|
||||
|
||||
|
||||
cx1 = cx2 = w/2
|
||||
cy1 = cy2 = h/2
|
||||
|
||||
|
||||
# if the size is odd, then adjust the bottom/right quadrants
|
||||
if w % 2 != 0:
|
||||
cx2 += 1
|
||||
if h % 2 != 0:
|
||||
cy2 += 1
|
||||
|
||||
cy2 += 1
|
||||
|
||||
# swap quadrants
|
||||
|
||||
|
||||
# swap q1 and q3
|
||||
ret[h-cy1:, w-cx1:] = src[0:cy1 , 0:cx1 ] # q1 -> q3
|
||||
ret[0:cy2 , 0:cx2 ] = src[h-cy2:, w-cx2:] # q3 -> q1
|
||||
|
||||
|
||||
# swap q2 and q4
|
||||
ret[0:cy2 , w-cx2:] = src[h-cy2:, 0:cx2 ] # q2 -> q4
|
||||
ret[h-cy1:, 0:cx1 ] = src[0:cy1 , w-cx1:] # q4 -> q2
|
||||
|
||||
|
||||
if src is dst:
|
||||
dst[:,:] = ret
|
||||
|
||||
|
||||
return dst
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
|
||||
if len(sys.argv)>1:
|
||||
im = cv2.imread(sys.argv[1])
|
||||
else :
|
||||
@@ -62,9 +62,9 @@ if __name__ == "__main__":
|
||||
# convert to grayscale
|
||||
im = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
|
||||
h, w = im.shape[:2]
|
||||
|
||||
|
||||
realInput = im.astype(np.float64)
|
||||
|
||||
|
||||
# perform an optimally sized dft
|
||||
dft_M = cv2.getOptimalDFTSize(w)
|
||||
dft_N = cv2.getOptimalDFTSize(h)
|
||||
@@ -72,22 +72,22 @@ if __name__ == "__main__":
|
||||
# copy A to dft_A and pad dft_A with zeros
|
||||
dft_A = np.zeros((dft_N, dft_M, 2), dtype=np.float64)
|
||||
dft_A[:h, :w, 0] = realInput
|
||||
|
||||
|
||||
# no need to pad bottom part of dft_A with zeros because of
|
||||
# use of nonzeroRows parameter in cv2.dft()
|
||||
cv2.dft(dft_A, dst=dft_A, nonzeroRows=h)
|
||||
|
||||
|
||||
cv2.imshow("win", im)
|
||||
|
||||
|
||||
# Split fourier into real and imaginary parts
|
||||
image_Re, image_Im = cv2.split(dft_A)
|
||||
|
||||
|
||||
# Compute the magnitude of the spectrum Mag = sqrt(Re^2 + Im^2)
|
||||
magnitude = cv2.sqrt(image_Re**2.0 + image_Im**2.0)
|
||||
|
||||
|
||||
# Compute log(1 + Mag)
|
||||
log_spectrum = cv2.log(1.0 + magnitude)
|
||||
|
||||
|
||||
# Rearrange the quadrants of Fourier image so that the origin is at
|
||||
# the image center
|
||||
shift_dft(log_spectrum, log_spectrum)
|
||||
|
@@ -8,12 +8,12 @@ This sample shows interactive image segmentation using grabcut algorithm.
|
||||
USAGE :
|
||||
python grabcut.py <filename>
|
||||
|
||||
README FIRST:
|
||||
README FIRST:
|
||||
Two windows will show up, one for input and one for output.
|
||||
|
||||
At first, in input window, draw a rectangle around the object using
|
||||
|
||||
At first, in input window, draw a rectangle around the object using
|
||||
mouse right button. Then press 'n' to segment the object (once or a few times)
|
||||
For any finer touch-ups, you can press any of the keys below and draw lines on
|
||||
For any finer touch-ups, you can press any of the keys below and draw lines on
|
||||
the areas you want. Then again press 'n' for updating the output.
|
||||
|
||||
Key '0' - To select areas of sure background
|
||||
@@ -53,7 +53,7 @@ thickness = 3 # brush thickness
|
||||
|
||||
def onmouse(event,x,y,flags,param):
|
||||
global img,img2,drawing,value,mask,rectangle,rect,rect_or_mask,ix,iy,rect_over
|
||||
|
||||
|
||||
# Draw Rectangle
|
||||
if event == cv2.EVENT_RBUTTONDOWN:
|
||||
rectangle = True
|
||||
@@ -73,9 +73,9 @@ def onmouse(event,x,y,flags,param):
|
||||
rect = (ix,iy,abs(ix-x),abs(iy-y))
|
||||
rect_or_mask = 0
|
||||
print " Now press the key 'n' a few times until no further change \n"
|
||||
|
||||
|
||||
# draw touchup curves
|
||||
|
||||
|
||||
if event == cv2.EVENT_LBUTTONDOWN:
|
||||
if rect_over == False:
|
||||
print "first draw rectangle \n"
|
||||
@@ -94,7 +94,7 @@ def onmouse(event,x,y,flags,param):
|
||||
drawing = False
|
||||
cv2.circle(img,(x,y),thickness,value['color'],-1)
|
||||
cv2.circle(mask,(x,y),thickness,value['val'],-1)
|
||||
|
||||
|
||||
# print documentation
|
||||
print __doc__
|
||||
|
||||
@@ -125,7 +125,7 @@ while(1):
|
||||
cv2.imshow('output',output)
|
||||
cv2.imshow('input',img)
|
||||
k = 0xFF & cv2.waitKey(1)
|
||||
|
||||
|
||||
# key bindings
|
||||
if k == 27: # esc to exit
|
||||
break
|
||||
@@ -147,11 +147,11 @@ while(1):
|
||||
elif k == ord('r'): # reset everything
|
||||
print "resetting \n"
|
||||
rect = (0,0,1,1)
|
||||
drawing = False
|
||||
rectangle = False
|
||||
rect_or_mask = 100
|
||||
rect_over = False
|
||||
value = DRAW_FG
|
||||
drawing = False
|
||||
rectangle = False
|
||||
rect_or_mask = 100
|
||||
rect_over = False
|
||||
value = DRAW_FG
|
||||
img = img2.copy()
|
||||
mask = np.zeros(img.shape[:2],dtype = np.uint8) # mask initialized to PR_BG
|
||||
output = np.zeros(img.shape,np.uint8) # output image to be shown
|
||||
@@ -160,15 +160,15 @@ while(1):
|
||||
and again press 'n' \n"""
|
||||
if (rect_or_mask == 0): # grabcut with rect
|
||||
bgdmodel = np.zeros((1,65),np.float64)
|
||||
fgdmodel = np.zeros((1,65),np.float64)
|
||||
fgdmodel = np.zeros((1,65),np.float64)
|
||||
cv2.grabCut(img2,mask,rect,bgdmodel,fgdmodel,1,cv2.GC_INIT_WITH_RECT)
|
||||
rect_or_mask = 1
|
||||
elif rect_or_mask == 1: # grabcut with mask
|
||||
bgdmodel = np.zeros((1,65),np.float64)
|
||||
fgdmodel = np.zeros((1,65),np.float64)
|
||||
fgdmodel = np.zeros((1,65),np.float64)
|
||||
cv2.grabCut(img2,mask,rect,bgdmodel,fgdmodel,1,cv2.GC_INIT_WITH_MASK)
|
||||
|
||||
mask2 = np.where((mask==1) + (mask==3),255,0).astype('uint8')
|
||||
output = cv2.bitwise_and(img2,img2,mask=mask2)
|
||||
output = cv2.bitwise_and(img2,img2,mask=mask2)
|
||||
|
||||
cv2.destroyAllWindows()
|
||||
|
Reference in New Issue
Block a user