Created
February 14, 2017 05:16
-
-
Save naxty/7d6f4af0ed9fd28447917c3e3058d4dd to your computer and use it in GitHub Desktop.
Opencv2 method to apply sobel to an image (Edge Detection)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import numpy as np | |
import cv2 | |
import matplotlib.pyplot as plt | |
import matplotlib.image as mpimg | |
import pickle | |
# Read in an image and grayscale it | |
image = mpimg.imread('signs_vehicles_xygrad.png') | |
# Define a function that applies Sobel x or y, | |
# then takes an absolute value and applies a threshold. | |
# Note: calling your function with orient='x', thresh_min=5, thresh_max=100 | |
# should produce output like the example image shown above this quiz. | |
def abs_sobel_thresh(img, orient='x', thresh_min=0, thresh_max=255): | |
# Apply the following steps to img | |
# 1) Convert to grayscale | |
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) | |
# 2) Take the derivative in x or y given orient = 'x' or 'y' | |
sobelx = cv2.Sobel(gray, cv2.CV_64F, 1, 0) | |
sobely = cv2.Sobel(gray, cv2.CV_64F, 0, 1) | |
# 3) Take the absolute value of the derivative or gradient | |
abs_sobelx = np.absolute(sobelx) | |
# 4) Scale to 8-bit (0 - 255) then convert to type = np.uint8 | |
scaled_sobel = np.uint8(255 * abs_sobelx/np.max(abs_sobelx)) | |
# 5) Create a mask of 1's where the scaled gradient magnitude | |
# is > thresh_min and < thresh_max | |
sxbinary = np.zeros_like(scaled_sobel) | |
sxbinary[(scaled_sobel >= thresh_min) & (scaled_sobel <= thresh_max)] = 1 | |
# 6) Return this mask as your binary_output image | |
binary_output = sxbinary | |
return binary_output | |
# Run the function | |
grad_binary = abs_sobel_thresh(image, orient='x', thresh_min=20, thresh_max=100) | |
# Plot the result | |
f, (ax1, ax2) = plt.subplots(1, 2, figsize=(24, 9)) | |
f.tight_layout() | |
ax1.imshow(image) | |
ax1.set_title('Original Image', fontsize=50) | |
ax2.imshow(grad_binary, cmap='gray') | |
ax2.set_title('Thresholded Gradient', fontsize=50) | |
plt.subplots_adjust(left=0., right=1, top=0.9, bottom=0.) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment