파이썬 + opencv로 비 사실적인 렌더링을 시도했습니다.
소개
opencv의 라이브러리에 준비되어 있는 비사실적 렌더링(논포토 리리스틱 렌더링:이하 NPR)을 시험해 보았습니다.
NPR은 입력된 영상이나 영상에 대해 손으로 쓴 그림과 같은 비사실적 표현을 목표로 합니다. 아래에서 실제 변환 결과를 참고로 이미지하십시오.
이 사이트를 참고로 구현했습니다.
OpenCV Non-Photorealistic Rendering
Learn OpenCV
결과
먼저 NPR의 실행 결과를 올려 둡니다.
입력은 여기

NPR 변환 결과
※opencv의 NPR은 4종류 있습니다.
edgePreservingFilter

detailEnhance

pencilSketch

stylization

구현
아래는 파이썬 코드입니다.
NPR.pyimport cv2
import argparse
from PIL import Image
def NPR(src):
epf = cv2.edgePreservingFilter(src, flags=1, sigma_s=60, sigma_r=0.4)
de = cv2.detailEnhance(src, sigma_s=10, sigma_r=0.15)
pen_gray, pen_col = cv2.pencilSketch(src, sigma_s=60, sigma_r=0.1, shade_factor=0.03)
style = cv2.stylization(src, sigma_s=60, sigma_r=0.07)
return epf, de, pen_col, style
def webcam_or_pic2npr(out,is_webcam,pic):
if is_webcam:
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
e,d,p,s = NPR(frame)
cv2.imshow('raw_input', frame)
cv2.imshow('edgePreservingFilter',e)
cv2.imshow('detailEnhance',d)
cv2.imshow('pencilSketch',p)
cv2.imshow('stylization',s)
key = cv2.waitKey(1) & 0xFF
if key == ord('q'):
break
elif key == ord('s'):
cv2.imwrite(out,frame)
cv2.imwrite(out,p)
cap.release()
cv2.destroyAllWindows()
else:
img = cv2.imread(pic, cv2.IMREAD_COLOR)
e,d,p,s = NPR(img)
cv2.imwrite(str(out)+'edgePreservingFilter.png',e)
cv2.imwrite(str(out)+'detailEnhance.png',d)
cv2.imwrite(str(out)+'pencilSketch.png',p)
cv2.imwrite(str(out)+'stylization.png',s)
def main():
parser = argparse.ArgumentParser(description='python+opencv_npr')
parser.add_argument('--in_pic','-i',default='sample.png',help='input_picture_name')
parser.add_argument('--out','-o',default='./',help='output_dir')
parser.add_argument('--is_webcam',action='store_true',help='use webwebcam_or_pic2npr')
args = parser.parse_args()
webcam_or_pic2npr(args.out, args.is_webcam, args.in_pic)
if __name__ == "__main__":
main()
실행 명령 (입력 = 이미지)
python NPR.py -i picture_name -o output_dir
실행 명령 (입력 = 웹 카메라)
python NPR.py --is_webcam
소감
파이썬과 opencv로 쉽게 구현할 수 있습니다.
라이브러리 4 종류의 로직의 상세는 시간이 있으면 추가 기술합니다.
여러가지 시험해 주시면 화상이 선명하게 되거나 보케 하고 있는 것을 알 수 있을까 생각합니다.
요약
파이썬 + opencv에서 비 사실적인 렌더링 네 가지 유형을 시도했습니다.
꼭, 수중의 화상으로 시험해 주세요.
읽어 주셔서 감사합니다.
소스 코드의 부정 등, 지적 있으면 잘 부탁드립니다.
LGTM도 환영합니다!
Reference
이 문제에 관하여(파이썬 + opencv로 비 사실적인 렌더링을 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/seamcarving/items/6a057e470735abc49713
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
먼저 NPR의 실행 결과를 올려 둡니다.
입력은 여기

NPR 변환 결과
※opencv의 NPR은 4종류 있습니다.
edgePreservingFilter

detailEnhance

pencilSketch

stylization

구현
아래는 파이썬 코드입니다.
NPR.pyimport cv2
import argparse
from PIL import Image
def NPR(src):
epf = cv2.edgePreservingFilter(src, flags=1, sigma_s=60, sigma_r=0.4)
de = cv2.detailEnhance(src, sigma_s=10, sigma_r=0.15)
pen_gray, pen_col = cv2.pencilSketch(src, sigma_s=60, sigma_r=0.1, shade_factor=0.03)
style = cv2.stylization(src, sigma_s=60, sigma_r=0.07)
return epf, de, pen_col, style
def webcam_or_pic2npr(out,is_webcam,pic):
if is_webcam:
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
e,d,p,s = NPR(frame)
cv2.imshow('raw_input', frame)
cv2.imshow('edgePreservingFilter',e)
cv2.imshow('detailEnhance',d)
cv2.imshow('pencilSketch',p)
cv2.imshow('stylization',s)
key = cv2.waitKey(1) & 0xFF
if key == ord('q'):
break
elif key == ord('s'):
cv2.imwrite(out,frame)
cv2.imwrite(out,p)
cap.release()
cv2.destroyAllWindows()
else:
img = cv2.imread(pic, cv2.IMREAD_COLOR)
e,d,p,s = NPR(img)
cv2.imwrite(str(out)+'edgePreservingFilter.png',e)
cv2.imwrite(str(out)+'detailEnhance.png',d)
cv2.imwrite(str(out)+'pencilSketch.png',p)
cv2.imwrite(str(out)+'stylization.png',s)
def main():
parser = argparse.ArgumentParser(description='python+opencv_npr')
parser.add_argument('--in_pic','-i',default='sample.png',help='input_picture_name')
parser.add_argument('--out','-o',default='./',help='output_dir')
parser.add_argument('--is_webcam',action='store_true',help='use webwebcam_or_pic2npr')
args = parser.parse_args()
webcam_or_pic2npr(args.out, args.is_webcam, args.in_pic)
if __name__ == "__main__":
main()
실행 명령 (입력 = 이미지)
python NPR.py -i picture_name -o output_dir
실행 명령 (입력 = 웹 카메라)
python NPR.py --is_webcam
소감
파이썬과 opencv로 쉽게 구현할 수 있습니다.
라이브러리 4 종류의 로직의 상세는 시간이 있으면 추가 기술합니다.
여러가지 시험해 주시면 화상이 선명하게 되거나 보케 하고 있는 것을 알 수 있을까 생각합니다.
요약
파이썬 + opencv에서 비 사실적인 렌더링 네 가지 유형을 시도했습니다.
꼭, 수중의 화상으로 시험해 주세요.
읽어 주셔서 감사합니다.
소스 코드의 부정 등, 지적 있으면 잘 부탁드립니다.
LGTM도 환영합니다!
Reference
이 문제에 관하여(파이썬 + opencv로 비 사실적인 렌더링을 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/seamcarving/items/6a057e470735abc49713
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import cv2
import argparse
from PIL import Image
def NPR(src):
epf = cv2.edgePreservingFilter(src, flags=1, sigma_s=60, sigma_r=0.4)
de = cv2.detailEnhance(src, sigma_s=10, sigma_r=0.15)
pen_gray, pen_col = cv2.pencilSketch(src, sigma_s=60, sigma_r=0.1, shade_factor=0.03)
style = cv2.stylization(src, sigma_s=60, sigma_r=0.07)
return epf, de, pen_col, style
def webcam_or_pic2npr(out,is_webcam,pic):
if is_webcam:
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
e,d,p,s = NPR(frame)
cv2.imshow('raw_input', frame)
cv2.imshow('edgePreservingFilter',e)
cv2.imshow('detailEnhance',d)
cv2.imshow('pencilSketch',p)
cv2.imshow('stylization',s)
key = cv2.waitKey(1) & 0xFF
if key == ord('q'):
break
elif key == ord('s'):
cv2.imwrite(out,frame)
cv2.imwrite(out,p)
cap.release()
cv2.destroyAllWindows()
else:
img = cv2.imread(pic, cv2.IMREAD_COLOR)
e,d,p,s = NPR(img)
cv2.imwrite(str(out)+'edgePreservingFilter.png',e)
cv2.imwrite(str(out)+'detailEnhance.png',d)
cv2.imwrite(str(out)+'pencilSketch.png',p)
cv2.imwrite(str(out)+'stylization.png',s)
def main():
parser = argparse.ArgumentParser(description='python+opencv_npr')
parser.add_argument('--in_pic','-i',default='sample.png',help='input_picture_name')
parser.add_argument('--out','-o',default='./',help='output_dir')
parser.add_argument('--is_webcam',action='store_true',help='use webwebcam_or_pic2npr')
args = parser.parse_args()
webcam_or_pic2npr(args.out, args.is_webcam, args.in_pic)
if __name__ == "__main__":
main()
python NPR.py -i picture_name -o output_dir
python NPR.py --is_webcam
파이썬과 opencv로 쉽게 구현할 수 있습니다.
라이브러리 4 종류의 로직의 상세는 시간이 있으면 추가 기술합니다.
여러가지 시험해 주시면 화상이 선명하게 되거나 보케 하고 있는 것을 알 수 있을까 생각합니다.
요약
파이썬 + opencv에서 비 사실적인 렌더링 네 가지 유형을 시도했습니다.
꼭, 수중의 화상으로 시험해 주세요.
읽어 주셔서 감사합니다.
소스 코드의 부정 등, 지적 있으면 잘 부탁드립니다.
LGTM도 환영합니다!
Reference
이 문제에 관하여(파이썬 + opencv로 비 사실적인 렌더링을 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/seamcarving/items/6a057e470735abc49713
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(파이썬 + opencv로 비 사실적인 렌더링을 시도했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/seamcarving/items/6a057e470735abc49713텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)