52 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			52 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python
 | |
| 
 | |
| '''
 | |
| Inpainting sample.
 | |
| 
 | |
| Inpainting repairs damage to images by floodfilling
 | |
| the damage with surrounding image areas.
 | |
| 
 | |
| Usage:
 | |
|   inpaint.py [<image>]
 | |
| 
 | |
| Keys:
 | |
|   SPACE - inpaint
 | |
|   r     - reset the inpainting mask
 | |
|   ESC   - exit
 | |
| '''
 | |
| 
 | |
| import numpy as np
 | |
| import cv2
 | |
| from common import Sketcher
 | |
| 
 | |
| if __name__ == '__main__':
 | |
|     import sys
 | |
|     try:
 | |
|         fn = sys.argv[1]
 | |
|     except:
 | |
|         fn = '../cpp/fruits.jpg'
 | |
| 
 | |
|     print __doc__
 | |
| 
 | |
|     img = cv2.imread(fn)
 | |
|     if img is None:
 | |
|         print 'Failed to load image file:', fn
 | |
|         sys.exit(1)
 | |
| 
 | |
|     img_mark = img.copy()
 | |
|     mark = np.zeros(img.shape[:2], np.uint8)
 | |
|     sketch = Sketcher('img', [img_mark, mark], lambda : ((255, 255, 255), 255))
 | |
| 
 | |
|     while True:
 | |
|         ch = 0xFF & cv2.waitKey()
 | |
|         if ch == 27:
 | |
|             break
 | |
|         if ch == ord(' '):
 | |
|             res = cv2.inpaint(img_mark, mark, 3, cv2.INPAINT_TELEA)
 | |
|             cv2.imshow('inpaint', res)
 | |
|         if ch == ord('r'):
 | |
|             img_mark[:] = img
 | |
|             mark[:] = 0
 | |
|             sketch.show()
 | |
|     cv2.destroyAllWindows()
 | 
