반응형
Patterning 란?
특정 패턴을 반복적으로 이용하여 사진을 묘사하는 방법이다. 이러한 방법을 사용하는 이유는 3x3 마스크 씌워 계산하기 때문에 계산량도 적고 점 찍는 숫자도 줄어든다. 즉, 프린트할 때 점을 적게 찍기 때문에 잉크가 덜 들 수 있다.
단점으로는 가로 아니면 세로로 줄 표시가 난다는 점이 있다.
아래는 openCV 를 활용해서 C++로 구현한 코드
void computePatterning(IplImage *img, IplImage *cpimg) {
//mask size > 3x3 [0-8]
//3x3 칙셀에서 한점을 찍는 순서
int order[] = { 1,8,0,6,2,5,7,3,4 };
for (int i = 0; i < img->width-2; i+=3) {
for (int j = 0; j < img->height-2; j+=3) {
auto c = cvGet2D(img, j, i);
auto b = (c.val[0] + c.val[1] + c.val[2]) / 3.0;
int level = (int)(b / 255 * 10);
for (int k = 0; k < level; k++) {
int i2 = i + order[k] % 3;
int j2 = j + order[k] / 3;
cvSet2D(cpimg, j2, i2, CV_RGB(255,255,255));
}
}
}
}
위 코드 결과 사진 :
고양이 그림이 일정 반복적인 패턴을 가지고 묘사된 것을 확인할 수 있다.
다른 그림도 잘 나오는 것을 확인할 수 있다.
반응형
'IT' 카테고리의 다른 글
[openCV / C++] 사진 교차해서 영상 만들기 (0) | 2021.01.05 |
---|---|
[openCV / C++] 색깔 가져와서 사각형 그리기 (0) | 2021.01.04 |
[openCV / C++] Image Thresholding 이미지 처리하기, 이미지 이진화 (0) | 2021.01.04 |
사진 노이즈 제거하기 (gaussian filter, gaussian blur) (0) | 2021.01.04 |
[openCV / C++ ] 픽셀 아트 만들기 (0) | 2020.12.31 |
댓글