seunghyun Note

Painterly rendering with CPP, opencv 본문

프로젝트/C++

Painterly rendering with CPP, opencv

승숭슝현 2024. 1. 5. 10:28

👾 painterly rendering : 사진을 사람이 그린 그림처럼 바꿔주는 기법

🤖 resource

  • opencv
    #include<opencv2/opencv.hpp>
  • 구조체 선언
typedef struct Point {
    int x;
    int y;
    struct Point* link;
}Point;
//stroke 형 구조체 선언
typedef struct Stroke { 
    int r; // 원의 반지름
    Point* pt; // point 구조체를 불러옴
    CvScalar g; // 색상값을 저장
    struct Stroke* link; // 다음 값을 가르키는 링크
}Stroke;
  • 논문의 의사코드를 활용

print function
makeSplineStroke
paintLayer function

  

  • Linked List, Stack Data structure
Point* pushPoint(Point* head, int x, int y) { // (x, y)좌표를 저장하는 함수 (연결 리스트형 스택 자료구조 활용)
    Point* temp; // 임시 포인터 변수를 만듬
    temp = (Point*)malloc(sizeof(Point)); // 저장공간 할당

    temp->x = x; // x값 대입
    temp->y = y; // y값 대입
    temp->link = NULL; // 다음 연결 노드가 없다는 표시

... 생략 ..

    return head;

}

-base Canvas Function

Stroke* paintCanvas(Stroke* head, IplImage* canvas, int mode) { // 논문상의 canvas 이미지에 색칠하는 함수
... 생략 ...
    }
  • 곡선, 주변값들의 좌표값 저장
  • 로컬상의 파일을 불러오기

result

참고 논문 hertzmann

728x90