Cartooning an Image using OpenCV - Python
Cartooning an image turns a normal photo into a fun, animated-style picture. With OpenCV, we do this by smoothing the image to simplify colors and detecting edges to create outlines. Combining these steps makes the photo look like a cartoon.
Prerequisites: Opencv module
Approach
- Read the input image.
- Convert the image to grayscale for edge detection.
- Apply a median blur to remove noise.
- Use adaptive thresholding to detect edges.
- Apply a bilateral filter to smooth the image while preserving edges.
- Combine the smoothed image with edges to produce the cartoon effect.
Python Implementation
import cv2
img = cv2.imread("Screenshot.png")
if img is None:
print("Image not found")
exit()
# Prep grayscale & blur
g = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
g = cv2.medianBlur(g, 5)
# Edges
e = cv2.adaptiveThreshold(g, 255, cv2.ADAPTIVE_THRESH_MEAN_C,
cv2.THRESH_BINARY, 9, 9)
# Smooth color
c = cv2.bilateralFilter(img, 9, 250, 250)
# Combine
cartoon = cv2.bitwise_and(c, c, mask=e)
cv2.imshow("Cartoon", cartoon)
cv2.imwrite("cartoon_output.jpg", cartoon)
cv2.waitKey(0)
cv2.destroyAllWindows()
Output:


Explanation:
- cv2.cvtColor() converts the image to grayscale for edge detection.
- cv2.medianBlur() removes noise for cleaner edges.
- cv2.adaptiveThreshold() detects edges, giving a sketch-like effect.
- cv2.bilateralFilter() smooths colors while keeping edges sharp.
- cv2.bitwise_and() combines smoothed colors and edges for the cartoon effect.