컴퓨터비전/영상처리/OpenCV
OpenCV 엠보싱, 수채화, 컬러 스케치 효과
object0814
2014. 11. 4. 03:35
OpenCV를 이용하여 엠보싱효과, 수채화 효과, 컬러 스케치 효과를 적용해 보았다.
[그림 1] 기본 이미지
[그림 2] 엠보싱 효과 적용
[그림 3] 수채화 효과 적용
[그림 4] 컬러 스케치 효과 적용
# 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | #include <cv.h> #include <highgui.h> #include <iostream> using namespace std; using namespace cv; void embose(Mat &), sketch(Mat &), waterColor(Mat &), display(Mat &, String); int main() { Mat image; image = imread("flower.jpg"); if (image.empty()) return -1; namedWindow("pure image"); imshow("pure image", image); embose(image); sketch(image); waterColor(image); waitKey(0); } void embose(Mat &src) { /* embose mask -1 0 0 0 0 0 0 0 1 */ Mat mask(3, 3, CV_32F, Scalar(0)), dst; mask.at<float>(0, 0) = -1.0; mask.at<float>(2, 2) = 1.0; filter2D(src, dst, CV_16S, mask); dst.convertTo(dst, CV_8U, 1, 128); display(dst, "embose"); } void sketch(Mat &src) { Mat gray, edge, dst; int threshold = 5; cvtColor(src, gray, CV_BGR2GRAY); blur(gray, gray, Size(3, 3)); Canny(gray, edge, threshold, threshold * 2, 5, 3); dst.create(src.size(), src.type()); dst = Scalar::all(128); src.copyTo(dst, edge); display(dst, "sketch"); } void waterColor(Mat &src) { double dsize = 7, sigma = 32; int iterate = 20; Mat t1 = src.clone(), t2; for (int i = 0; i < iterate; i++) { if (i % 2 == 0) bilateralFilter(t1, t2, dsize, sigma, sigma); else bilateralFilter(t2, t1, dsize, sigma, sigma); } if (iterate % 2 == 0) display(t1, "waterColor"); else display(t2, "waterColor"); } void display(Mat &img, String name) { namedWindow(name); imshow(name, img); } |