Merge pull request #9406 from Cartucho:update_core_tutorials
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
from __future__ import print_function
|
||||
import sys
|
||||
|
||||
import cv2
|
||||
|
||||
alpha = 0.5
|
||||
|
||||
print(''' Simple Linear Blender
|
||||
-----------------------
|
||||
* Enter alpha [0.0-1.0]: ''')
|
||||
if sys.version_info >= (3, 0): # If Python 3.x
|
||||
input_alpha = float(input())
|
||||
else:
|
||||
input_alpha = float(raw_input())
|
||||
if 0 <= alpha <= 1:
|
||||
alpha = input_alpha
|
||||
## [load]
|
||||
src1 = cv2.imread('../../../../data/LinuxLogo.jpg')
|
||||
src2 = cv2.imread('../../../../data/WindowsLogo.jpg')
|
||||
## [load]
|
||||
if src1 is None:
|
||||
print ("Error loading src1")
|
||||
exit(-1)
|
||||
elif src2 is None:
|
||||
print ("Error loading src2")
|
||||
exit(-1)
|
||||
## [blend_images]
|
||||
beta = (1.0 - alpha)
|
||||
dst = cv2.addWeighted(src1, alpha, src2, beta, 0.0)
|
||||
## [blend_images]
|
||||
## [display]
|
||||
cv2.imshow('dst', dst)
|
||||
cv2.waitKey(0)
|
||||
## [display]
|
||||
cv2.destroyAllWindows()
|
||||
@@ -0,0 +1,115 @@
|
||||
import cv2
|
||||
import numpy as np
|
||||
|
||||
W = 400
|
||||
## [my_ellipse]
|
||||
def my_ellipse(img, angle):
|
||||
thickness = 2
|
||||
line_type = 8
|
||||
|
||||
cv2.ellipse(img,
|
||||
(W / 2, W / 2),
|
||||
(W / 4, W / 16),
|
||||
angle,
|
||||
0,
|
||||
360,
|
||||
(255, 0, 0),
|
||||
thickness,
|
||||
line_type)
|
||||
## [my_ellipse]
|
||||
## [my_filled_circle]
|
||||
def my_filled_circle(img, center):
|
||||
thickness = -1
|
||||
line_type = 8
|
||||
|
||||
cv2.circle(img,
|
||||
center,
|
||||
W / 32,
|
||||
(0, 0, 255),
|
||||
thickness,
|
||||
line_type)
|
||||
## [my_filled_circle]
|
||||
## [my_polygon]
|
||||
def my_polygon(img):
|
||||
line_type = 8
|
||||
|
||||
# Create some points
|
||||
ppt = np.array([[W / 4, 7 * W / 8], [3 * W / 4, 7 * W / 8],
|
||||
[3 * W / 4, 13 * W / 16], [11 * W / 16, 13 * W / 16],
|
||||
[19 * W / 32, 3 * W / 8], [3 * W / 4, 3 * W / 8],
|
||||
[3 * W / 4, W / 8], [26 * W / 40, W / 8],
|
||||
[26 * W / 40, W / 4], [22 * W / 40, W / 4],
|
||||
[22 * W / 40, W / 8], [18 * W / 40, W / 8],
|
||||
[18 * W / 40, W / 4], [14 * W / 40, W / 4],
|
||||
[14 * W / 40, W / 8], [W / 4, W / 8],
|
||||
[W / 4, 3 * W / 8], [13 * W / 32, 3 * W / 8],
|
||||
[5 * W / 16, 13 * W / 16], [W / 4, 13 * W / 16]], np.int32)
|
||||
ppt = ppt.reshape((-1, 1, 2))
|
||||
cv2.fillPoly(img, [ppt], (255, 255, 255), line_type)
|
||||
# Only drawind the lines would be:
|
||||
# cv2.polylines(img, [ppt], True, (255, 0, 255), line_type)
|
||||
## [my_polygon]
|
||||
## [my_line]
|
||||
def my_line(img, start, end):
|
||||
thickness = 2
|
||||
line_type = 8
|
||||
|
||||
cv2.line(img,
|
||||
start,
|
||||
end,
|
||||
(0, 0, 0),
|
||||
thickness,
|
||||
line_type)
|
||||
## [my_line]
|
||||
## [create_images]
|
||||
# Windows names
|
||||
atom_window = "Drawing 1: Atom"
|
||||
rook_window = "Drawing 2: Rook"
|
||||
|
||||
# Create black empty images
|
||||
size = W, W, 3
|
||||
atom_image = np.zeros(size, dtype=np.uint8)
|
||||
rook_image = np.zeros(size, dtype=np.uint8)
|
||||
## [create_images]
|
||||
## [draw_atom]
|
||||
# 1. Draw a simple atom:
|
||||
# -----------------------
|
||||
|
||||
# 1.a. Creating ellipses
|
||||
my_ellipse(atom_image, 90)
|
||||
my_ellipse(atom_image, 0)
|
||||
my_ellipse(atom_image, 45)
|
||||
my_ellipse(atom_image, -45)
|
||||
|
||||
# 1.b. Creating circles
|
||||
my_filled_circle(atom_image, (W / 2, W / 2))
|
||||
## [draw_atom]
|
||||
## [draw_rook]
|
||||
|
||||
# 2. Draw a rook
|
||||
# ------------------
|
||||
# 2.a. Create a convex polygon
|
||||
my_polygon(rook_image)
|
||||
## [rectangle]
|
||||
# 2.b. Creating rectangles
|
||||
cv2.rectangle(rook_image,
|
||||
(0, 7 * W / 8),
|
||||
(W, W),
|
||||
(0, 255, 255),
|
||||
-1,
|
||||
8)
|
||||
## [rectangle]
|
||||
|
||||
# 2.c. Create a few lines
|
||||
my_line(rook_image, (0, 15 * W / 16), (W, 15 * W / 16))
|
||||
my_line(rook_image, (W / 4, 7 * W / 8), (W / 4, W))
|
||||
my_line(rook_image, (W / 2, 7 * W / 8), (W / 2, W))
|
||||
my_line(rook_image, (3 * W / 4, 7 * W / 8), (3 * W / 4, W))
|
||||
## [draw_rook]
|
||||
cv2.imshow(atom_window, atom_image)
|
||||
cv2.moveWindow(atom_window, 0, 200)
|
||||
cv2.imshow(rook_window, rook_image)
|
||||
cv2.moveWindow(rook_window, W, 200)
|
||||
|
||||
cv2.waitKey(0)
|
||||
cv2.destroyAllWindows()
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
from __future__ import print_function
|
||||
import sys
|
||||
|
||||
import cv2
|
||||
import numpy as np
|
||||
|
||||
|
||||
def print_help():
|
||||
print('''
|
||||
This program demonstrated the use of the discrete Fourier transform (DFT).
|
||||
The dft of an image is taken and it's power spectrum is displayed.
|
||||
Usage:
|
||||
discrete_fourier_transform.py [image_name -- default ../../../../data/lena.jpg]''')
|
||||
|
||||
|
||||
def main(argv):
|
||||
|
||||
print_help()
|
||||
|
||||
filename = argv[0] if len(argv) > 0 else "../../../../data/lena.jpg"
|
||||
|
||||
I = cv2.imread(filename, cv2.IMREAD_GRAYSCALE)
|
||||
if I is None:
|
||||
print('Error opening image')
|
||||
return -1
|
||||
## [expand]
|
||||
rows, cols = I.shape
|
||||
m = cv2.getOptimalDFTSize( rows )
|
||||
n = cv2.getOptimalDFTSize( cols )
|
||||
padded = cv2.copyMakeBorder(I, 0, m - rows, 0, n - cols, cv2.BORDER_CONSTANT, value=[0, 0, 0])
|
||||
## [expand]
|
||||
## [complex_and_real]
|
||||
planes = [np.float32(padded), np.zeros(padded.shape, np.float32)]
|
||||
complexI = cv2.merge(planes) # Add to the expanded another plane with zeros
|
||||
## [complex_and_real]
|
||||
## [dft]
|
||||
cv2.dft(complexI, complexI) # this way the result may fit in the source matrix
|
||||
## [dft]
|
||||
# compute the magnitude and switch to logarithmic scale
|
||||
# = > log(1 + sqrt(Re(DFT(I)) ^ 2 + Im(DFT(I)) ^ 2))
|
||||
## [magnitude]
|
||||
cv2.split(complexI, planes) # planes[0] = Re(DFT(I), planes[1] = Im(DFT(I))
|
||||
cv2.magnitude(planes[0], planes[1], planes[0])# planes[0] = magnitude
|
||||
magI = planes[0]
|
||||
## [magnitude]
|
||||
## [log]
|
||||
matOfOnes = np.ones(magI.shape, dtype=magI.dtype)
|
||||
cv2.add(matOfOnes, magI, magI) # switch to logarithmic scale
|
||||
cv2.log(magI, magI)
|
||||
## [log]
|
||||
## [crop_rearrange]
|
||||
magI_rows, magI_cols = magI.shape
|
||||
# crop the spectrum, if it has an odd number of rows or columns
|
||||
magI = magI[0:(magI_rows & -2), 0:(magI_cols & -2)]
|
||||
cx = int(magI_rows/2)
|
||||
cy = int(magI_cols/2)
|
||||
|
||||
q0 = magI[0:cx, 0:cy] # Top-Left - Create a ROI per quadrant
|
||||
q1 = magI[cx:cx+cx, 0:cy] # Top-Right
|
||||
q2 = magI[0:cx, cy:cy+cy] # Bottom-Left
|
||||
q3 = magI[cx:cx+cx, cy:cy+cy] # Bottom-Right
|
||||
|
||||
tmp = np.copy(q0) # swap quadrants (Top-Left with Bottom-Right)
|
||||
magI[0:cx, 0:cy] = q3
|
||||
magI[cx:cx + cx, cy:cy + cy] = tmp
|
||||
|
||||
tmp = np.copy(q1) # swap quadrant (Top-Right with Bottom-Left)
|
||||
magI[cx:cx + cx, 0:cy] = q2
|
||||
magI[0:cx, cy:cy + cy] = tmp
|
||||
## [crop_rearrange]
|
||||
## [normalize]
|
||||
cv2.normalize(magI, magI, 0, 1, cv2.NORM_MINMAX) # Transform the matrix with float values into a
|
||||
## viewable image form(float between values 0 and 1).
|
||||
## [normalize]
|
||||
cv2.imshow("Input Image" , I ) # Show the result
|
||||
cv2.imshow("spectrum magnitude", magI)
|
||||
cv2.waitKey()
|
||||
|
||||
if __name__ == "__main__":
|
||||
main(sys.argv[1:])
|
||||
@@ -1,9 +1,10 @@
|
||||
from __future__ import print_function
|
||||
import sys
|
||||
import time
|
||||
|
||||
import numpy as np
|
||||
import cv2
|
||||
|
||||
|
||||
## [basic_method]
|
||||
def is_grayscale(my_image):
|
||||
return len(my_image.shape) < 3
|
||||
@@ -26,7 +27,6 @@ def sharpen(my_image):
|
||||
height, width, n_channels = my_image.shape
|
||||
|
||||
result = np.zeros(my_image.shape, my_image.dtype)
|
||||
|
||||
## [basic_method_loop]
|
||||
for j in range(1, height - 1):
|
||||
for i in range(1, width - 1):
|
||||
@@ -36,17 +36,16 @@ def sharpen(my_image):
|
||||
result[j, i] = saturated(sum_value)
|
||||
else:
|
||||
for k in range(0, n_channels):
|
||||
sum_value = 5 * my_image[j, i, k] - my_image[j + 1, i, k] - my_image[j - 1, i, k] \
|
||||
- my_image[j, i + 1, k] - my_image[j, i - 1, k]
|
||||
sum_value = 5 * my_image[j, i, k] - my_image[j + 1, i, k] \
|
||||
- my_image[j - 1, i, k] - my_image[j, i + 1, k]\
|
||||
- my_image[j, i - 1, k]
|
||||
result[j, i, k] = saturated(sum_value)
|
||||
## [basic_method_loop]
|
||||
|
||||
return result
|
||||
## [basic_method]
|
||||
|
||||
|
||||
def main(argv):
|
||||
filename = "../data/lena.jpg"
|
||||
filename = "../../../../data/lena.jpg"
|
||||
|
||||
img_codec = cv2.IMREAD_COLOR
|
||||
if argv:
|
||||
@@ -57,8 +56,9 @@ def main(argv):
|
||||
src = cv2.imread(filename, img_codec)
|
||||
|
||||
if src is None:
|
||||
print "Can't open image [" + filename + "]"
|
||||
print "Usage:\nmat_mask_operations.py [image_path -- default ../data/lena.jpg] [G -- grayscale]"
|
||||
print("Can't open image [" + filename + "]")
|
||||
print("Usage:")
|
||||
print("mat_mask_operations.py [image_path -- default ../../../../data/lena.jpg] [G -- grayscale]")
|
||||
return -1
|
||||
|
||||
cv2.namedWindow("Input", cv2.WINDOW_AUTOSIZE)
|
||||
@@ -70,7 +70,7 @@ def main(argv):
|
||||
dst0 = sharpen(src)
|
||||
|
||||
t = (time.time() - t) / 1000
|
||||
print "Hand written function time passed in seconds: %s" % t
|
||||
print("Hand written function time passed in seconds: %s" % t)
|
||||
|
||||
cv2.imshow("Output", dst0)
|
||||
cv2.waitKey()
|
||||
@@ -81,13 +81,13 @@ def main(argv):
|
||||
[-1, 5, -1],
|
||||
[0, -1, 0]], np.float32) # kernel should be floating point type
|
||||
## [kern]
|
||||
|
||||
## [filter2D]
|
||||
dst1 = cv2.filter2D(src, -1, kernel) # ddepth = -1, means destination image has depth same as input image
|
||||
dst1 = cv2.filter2D(src, -1, kernel)
|
||||
# ddepth = -1, means destination image has depth same as input image
|
||||
## [filter2D]
|
||||
|
||||
t = (time.time() - t) / 1000
|
||||
print "Built-in filter2D time passed in seconds: %s" % t
|
||||
print("Built-in filter2D time passed in seconds: %s" % t)
|
||||
|
||||
cv2.imshow("Output", dst1)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user