Python 그림 처리 그림 재단 강좌
일단 그 렇 죠?
1.사진 한 장
이것 은 인터넷 에서 마음대로 찾 은 사진 으로,스스로 테스트 를 저장 하 는 것 이다.
2.사진 보기
실행 코드,그 중 showimg 함 수 는 전시 사진 입 니 다.
3.각 점 선택
왼쪽 위,오른쪽 위,오른쪽 아래,왼쪽 아래 순서대로 네 개의 각 점 을 선택 하 세 요.
만약 내 가 잘 선택 하지 못 할 까 봐 걱정 된다 면,내 코드 에 있 는 points 의 주석 을 직접 제거 할 수 있다.그것 은 내 가 사용 하 는 원판 이다.
4.최종 결과
코드 분석
import 할 말 없어 요.
# python cv2, python-opencv
import cv2 as cv
import numpy as np
그림 의 너비 가 져 오기
# cv.imread ,
def get_window_size(src, bound=600):
h,w = src.shape[0], src.shape[1]
if h > w:
h, w = bound, int(w*bound/h)
else:
h, w = int(h*bound/w), bound
return (h, w)
마 우 스 를 통 해 그림 의 좌표 점 을 얻 을 수 있 습 니 다.순 서 는 왼쪽 위,오른쪽 위,오른쪽 아래,왼쪽 아래 입 니 다.
class Indexer:
def __init__(self, bound=4):
self.id = 0
self.bound = bound
def get_id(self):
self.id = (self.id + 1)
return (self.id)
def on_EVENT_LBUTTONDOWN(event, x, y, flags, param):
if event == cv.EVENT_LBUTTONDOWN:
img = param['src']
win_name = param['window']
indexer = param['indexer']
points = param['points']
curr_id = indexer.get_id()
points.append((x, y))
print(' {} : ({},{})'.format(curr_id, x, y))
cv.circle(img, (x, y), 10, (0, 0, 255), thickness=2)
cv.putText(
img,
str(curr_id), #
(x, y), #
cv.FONT_HERSHEY_PLAIN,
5, #
(0, 0, 255), #
thickness=2 #
)
cv.imshow(win_name, img)
# cv.imread ,
def get_points(src):
points = []
indexer = Indexer()
h, w=get_window_size(src)
win_name = 'get_points'
cv.namedWindow(win_name, cv.WINDOW_NORMAL)
cv.resizeWindow(win_name, width=w, height=h)
cv.imshow(win_name, src)
cv.setMouseCallback(win_name, on_EVENT_LBUTTONDOWN,
param={'src': src, 'window': win_name, 'indexer': indexer, 'points': points})
cv.waitKey(0)
cv.destroyAllWindows()
if len(points)>4:
return points[0:4]
# print(points)
# points=[(2, 14), (90, 50), (87, 194), (1, 204)]
return points
# cv.imread ,
def show_img(src):
win_name = 'show_img'
h, w=get_window_size(src)
cv.namedWindow(win_name, cv.WINDOW_NORMAL)
cv.resizeWindow(win_name, width=w, height=h)
cv.imshow(win_name, src)
cv.waitKey(0)
cv.destroyAllWindows()
그림 을 캡 처 하고 지정 한 길이 와 너비 에 따라 직사각형 으로 복원 합 니 다.
def photo_cut_restore(src,points,H,W):
target_points = [(0, 0), (W, 0), (W, H), (0, H)]
points, target_points = np.array(points, dtype=np.float32), np.array(target_points, dtype=np.float32)
M = cv.getPerspectiveTransform(points, target_points)
# print(' :', M)
result = cv.warpPerspective(src_copy, M, (0, 0))
result = result[:H, :W]
win_name = 'Result'
cv.namedWindow(win_name, cv.WINDOW_NORMAL)
cv.resizeWindow(win_name, width=W, height=H)
cv.imshow(win_name,result)
cv.waitKey(0)
cv.destroyAllWindows()
return result
주 프로그램
if __name__ == '__main__':
path = './1.jpg'
src = cv.imread(path)
src_copy = src.copy()
show_img(src)
W = 20
H = 20
# points=[(112, 308), (175, 310), (176, 369), (113, 369)]
points=get_points(src)
n = 20
W = int(W * n)
H = int(H * n)
result=photo_cut_restore(src_copy,points,H,W)
output_file = 'result.jpg'
cv.imwrite(output_file, result)
게으름뱅이에이,화가 나 지 않 아.겨우 한 단락 을 복 사 했 는데 결국 원 키 로 복 사 된 곳 이 있었어.
import cv2 as cv
import numpy as np
# cv.imread ,
def get_window_size(src, bound=600):
h,w = src.shape[0], src.shape[1]
if h > w:
h, w = bound, int(w*bound/h)
else:
h, w = int(h*bound/w), bound
return (h, w)
class Indexer:
def __init__(self):
self.id = 0
def get_id(self):
self.id = (self.id + 1)
return (self.id)
def on_EVENT_LBUTTONDOWN(event, x, y, flags, param):
if event == cv.EVENT_LBUTTONDOWN:
img = param['src']
win_name = param['window']
indexer = param['indexer']
points = param['points']
curr_id = indexer.get_id()
points.append((x, y))
print(' {} : ({},{})'.format(curr_id, x, y))
cv.circle(img, (x, y), 10, (0, 0, 255), thickness=2)
cv.putText(
img,
str(curr_id), #
(x, y), #
cv.FONT_HERSHEY_PLAIN,
5, #
(0, 0, 255), #
thickness=2 #
)
cv.imshow(win_name, img)
# cv.imread ,
def get_points(src):
points = []
indexer = Indexer()
h, w=get_window_size(src)
win_name = 'get_points'
cv.namedWindow(win_name, cv.WINDOW_NORMAL)
cv.resizeWindow(win_name, width=w, height=h)
cv.imshow(win_name, src)
cv.setMouseCallback(win_name, on_EVENT_LBUTTONDOWN,
param={'src': src, 'window': win_name, 'indexer': indexer, 'points': points})
cv.waitKey(0)
cv.destroyAllWindows()
if len(points)>4:
return points[0:4]
# print(points)
# points=[(2, 14), (90, 50), (87, 194), (1, 204)]
return points
# cv.imread ,
def show_img(src):
win_name = 'show_img'
h, w=get_window_size(src)
cv.namedWindow(win_name, cv.WINDOW_NORMAL)
cv.resizeWindow(win_name, width=w, height=h)
cv.imshow(win_name, src)
cv.waitKey(0)
cv.destroyAllWindows()
def photo_cut_restore(src,points,H,W):
target_points = [(0, 0), (W, 0), (W, H), (0, H)]
points, target_points = np.array(points, dtype=np.float32), np.array(target_points, dtype=np.float32)
M = cv.getPerspectiveTransform(points, target_points)
# print(' :', M)
result = cv.warpPerspective(src_copy, M, (0, 0))
result = result[:H, :W]
win_name = 'Result'
cv.namedWindow(win_name, cv.WINDOW_NORMAL)
cv.resizeWindow(win_name, width=W, height=H)
cv.imshow(win_name,result)
cv.waitKey(0)
cv.destroyAllWindows()
return result
if __name__ == '__main__':
path = './3.jpg'
src = cv.imread(path)
src_copy = src.copy()
# show_img(src)
W = 20
H = 20
# points=[(124, 182), (181, 177), (180, 243), (125, 266)]
points=get_points(src)
print(points)
n = 20
W = int(W * n)
H = int(H * n)
result=photo_cut_restore(src_copy,points,H,W)
output_file = 'result.jpg'
cv.imwrite(output_file, result)
파 이 썬 이미지 처리 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.파 이 썬 이미지 재단 에 관 한 더 많은 내용 은 예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.