mirror of https://github.com/opencv/opencv.git
Open Source Computer Vision Library
https://opencv.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
2.4 KiB
107 lines
2.4 KiB
import sys |
|
import cv2 as cv |
|
import numpy as np |
|
|
|
# Global Variables |
|
|
|
DELAY_CAPTION = 1500 |
|
DELAY_BLUR = 100 |
|
MAX_KERNEL_LENGTH = 31 |
|
|
|
src = None |
|
dst = None |
|
window_name = 'Smoothing Demo' |
|
|
|
|
|
def main(argv): |
|
cv.namedWindow(window_name, cv.WINDOW_AUTOSIZE) |
|
|
|
# Load the source image |
|
imageName = argv[0] if len(argv) > 0 else "../data/lena.jpg" |
|
|
|
global src |
|
src = cv.imread(imageName, 1) |
|
if src is None: |
|
print ('Error opening image') |
|
print ('Usage: smoothing.py [image_name -- default ../data/lena.jpg] \n') |
|
return -1 |
|
|
|
if display_caption('Original Image') != 0: |
|
return 0 |
|
|
|
global dst |
|
dst = np.copy(src) |
|
if display_dst(DELAY_CAPTION) != 0: |
|
return 0 |
|
|
|
# Applying Homogeneous blur |
|
if display_caption('Homogeneous Blur') != 0: |
|
return 0 |
|
|
|
## [blur] |
|
for i in range(1, MAX_KERNEL_LENGTH, 2): |
|
dst = cv.blur(src, (i, i)) |
|
if display_dst(DELAY_BLUR) != 0: |
|
return 0 |
|
## [blur] |
|
|
|
# Applying Gaussian blur |
|
if display_caption('Gaussian Blur') != 0: |
|
return 0 |
|
|
|
## [gaussianblur] |
|
for i in range(1, MAX_KERNEL_LENGTH, 2): |
|
dst = cv.GaussianBlur(src, (i, i), 0) |
|
if display_dst(DELAY_BLUR) != 0: |
|
return 0 |
|
## [gaussianblur] |
|
|
|
# Applying Median blur |
|
if display_caption('Median Blur') != 0: |
|
return 0 |
|
|
|
## [medianblur] |
|
for i in range(1, MAX_KERNEL_LENGTH, 2): |
|
dst = cv.medianBlur(src, i) |
|
if display_dst(DELAY_BLUR) != 0: |
|
return 0 |
|
## [medianblur] |
|
|
|
# Applying Bilateral Filter |
|
if display_caption('Bilateral Blur') != 0: |
|
return 0 |
|
|
|
## [bilateralfilter] |
|
# Remember, bilateral is a bit slow, so as value go higher, it takes long time |
|
for i in range(1, MAX_KERNEL_LENGTH, 2): |
|
dst = cv.bilateralFilter(src, i, i * 2, i / 2) |
|
if display_dst(DELAY_BLUR) != 0: |
|
return 0 |
|
## [bilateralfilter] |
|
|
|
# Done |
|
display_caption('Done!') |
|
|
|
return 0 |
|
|
|
|
|
def display_caption(caption): |
|
global dst |
|
dst = np.zeros(src.shape, src.dtype) |
|
rows, cols, _ch = src.shape |
|
cv.putText(dst, caption, |
|
(int(cols / 4), int(rows / 2)), |
|
cv.FONT_HERSHEY_COMPLEX, 1, (255, 255, 255)) |
|
|
|
return display_dst(DELAY_CAPTION) |
|
|
|
|
|
def display_dst(delay): |
|
cv.imshow(window_name, dst) |
|
c = cv.waitKey(delay) |
|
if c >= 0 : return -1 |
|
return 0 |
|
|
|
|
|
if __name__ == "__main__": |
|
main(sys.argv[1:])
|
|
|