Skip to content

implementation of Implementation of Aaron Hertzmann's paper "Painterly Rendering with Curved Brush Strokes of Multiple Sizes".

Notifications You must be signed in to change notification settings

csinrn/PaintBrush

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PaintBrush

Implementation of Aaron Hertzmann's paper "Painterly Rendering with Curved Brush Strokes of Multiple Sizes".

To test the code

Install g++ opencv4, and cmake ensure cmd command pkg-config opencv4 --cflags --libs returns all opencv4 dependencies for example:

$pkg-config opencv4 --cflags --libs
-I/usr/local/Cellar/opencv/4.5.1_3/include/opencv4 -L/usr/local/Cellar/opencv/4.5.1_3/lib -lopencv_gapi -lopencv_stitching -lopencv_alphamat -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_intensity_transform -lopencv_line_descriptor -lopencv_mcc -lopencv_quality -lopencv_rapid -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_sfm -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_highgui -lopencv_datasets -lopencv_text -lopencv_plot -lopencv_videostab -lopencv_videoio -lopencv_viz -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_dnn -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core

After make sure opencv is installed, run

$ make
$ ./finalProject.o [path to source video]         # default in opencv DIVX encoding for a better quality, some video players may have trouble opening the file with this encoding
$ ./finalProject.o [path to source video] MJPEG   # use MJPEG encoding instead

the window will show the processed frame, and f.avi will be created in the current directory.

To Use the Library

There are two classes in this code. Para.hpp is the class to store all parameters, and Paint.hpp is to implement the painting algorithm. Include Para.hpp and Paint.hpp, and call paint() function in Paint.hpp for each frame you would like to process. Check finalProject.cpp for an example.

A demo of how th layers are painted
demoPicture Original
Screen Shot 2021-06-29 at 10 11 35 AMLayer1
Screen Shot 2021-06-29 at 10 11 40 AMLayer2
Screen Shot 2021-06-29 at 10 11 44 AMLayer3
Screen Shot 2021-06-29 at 10 11 47 AMLayer4
Screen Shot 2021-06-29 at 10 11 50 AMLayer5
Screen Shot 2021-06-29 at 10 11 58 AMFinal

About

implementation of Implementation of Aaron Hertzmann's paper "Painterly Rendering with Curved Brush Strokes of Multiple Sizes".

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published