본문 바로가기

졸업프로젝트/OpenCV

(9)
[openCV]답지 문제별로 자르기(3) 페이지가 분리되어 쪼개진 하나의 답을 하나의 이미지로 합치기 (중략) 위의 사진 2개와 같은 사진을 하나로 합쳐야한다 아이디어) 이미지를 차례대로 받아오면서, "답"이미지가 존재하는 경우 이미지를 그냥 저장 "답"이미지가 존재하지 않는 경우 배열에 이미지를 저장해두고, 그 이후로 최초의 "답"이미지를 보유한 사진이 나오면 배열에 저장해둔 사진을 차례대로 꺼내 이어서 저장해준다 이를 위해 flag를 이용한다. "답"이미지를 찾아서 이미지를 저장한 경우는 flag = 1 "답"이미지가 없는 이미지를 만나 배열에 저장하는 경우는 flag = 0 사용할 변수 초기화 qnum=1 flag = 1 noans_count=0 image_arr = [None]*8 qnum : 저장할 이미지에 부여할 고유번호 flag :..
[OpenCV] 답지 문제별로 자르기(2) - 오류 2021/01/19 - [졸업프로젝트/OpenCV] - [OpenCV] 답지 문제별로 자르기(1) [OpenCV] 답지 문제별로 자르기(1) 목표) 문제집 답지의 특정 페이지를 넣으면 각 문제별로 크롭하여 저장하기 input : 수능완성 답안지(png) output) (10번이전 일부 문제 포함) 10번 ~21번(약간 잘림) 까지의 이미지 아이디어) 1. 전체 페 iagreebut.tistory.com 이 글에서 "매칭 기준으로 자르기" 부분은 많은 삽질을 통해 알아내었고, 최종적으로는 다음과 같다 def contour(page_rl): #이미지 흑백화 imgray = cv2.cvtColor(page_rl, cv2.COLOR_BGR2GRAY) #추출하려는 이미지 template = cv2.imread('..
[OpenCV] 답지 문제별로 자르기(1) 목표) 문제집 답지의 특정 페이지를 넣으면 각 문제별로 크롭하여 저장하기 input : 수능완성 답안지(png) output) (10번이전 일부 문제 포함) 10번 ~21번(약간 잘림) 까지의 이미지 아이디어) 1. 전체 페이지에서 윗단과아랫단 제거 -> 문제영역만 남기기 (trim이용) 2. 페이지를 왼쪽 부분과 오른쪽 부분으로 나눔 -> 중앙 라인 제거 * issue 1) 왼쪽과 오른쪽 부분의 가로 크기는 같아야 할 것 issue 2) 홀수 페이지와 짝수 페이지의 중앙 선 부분의 위치가 다름 3. "답" 이미지를 중심으로 일정 여백을 더하여 해당 부분을 자르면, 모든 문제에 대해서 잘라낼 수 있음 * issue) 페이지의 맨 하단에 있는 "답"이미지가 없는 부분(문제의 시작부분 끝부분은 다음페이지에 ..
[OpenCV] 이미지에서 특정 이미지 찾아내기 답지에서 해당 답의 영역만을 추출하기 위해서는 다음과 같은 "답"이라는 이미지를 답지 페이지내에서 찾아낸 후 해당 이미지를 기준으로 그 아래를 자르면 된다 그래서 일단 이번 게시글에서는 이런 답지의 페이지 내에서 다음과 같이 "답"이라는 이미지를 전부 찾아내는 것을 목적으로 한다 1. 찾아내길 원하는 이미지 크롭하기 먼저 이 이미지를 따로 만들어내야 한다 주의할 점은 위와 같은 찾아내려는 목적이미지를 절대로 캡쳐 해서는 안되고 원본이미지(답지이미지)에서 그 부분("답")을 잘라내야 한다는 점이다. 잘라내는 방법으론 여러가지 방법이 있지만 그냥 자르는 사이트를 이용해서 잘라냈다 www.iloveimg.com/ko/crop-image 이미지를 신속하게, 무료로 잘라내세요! JPG, PNG, GIF 파일을 신..
[OpenCV]문제지에서 문제 크롭(2) 아이디어) 전체 이미지에서 윗단과 아랫단을 제거 한 후 (문제영역만 남김) 페이지를 왼쪽부분과 오른쪽 부분으로 나눈 후 (1)글에서와 유사하게 진행하면서 kernel사이즈의 x size를 충분히 키우면 검출해 낼 수 있을 것 1. 이미지 tirm : imtrim함수 #수능완성 page trim def imtrim(page): x=300 w=1120 left = page[465:3450, x:x+w] x=1480 right = page[465:3450,x:x+w] return right,left 아랫단과 윗단을 제거한 후 페이지를 오른쪽 부분과 왼쪽 부분으로 나눔 그 후 right, left라는 변수에 저장한 후 return함 결과) 2. 이미지 전처리 + 외곽추출 + 일반화 : contour함수 #반페이..
[OpenCV]Morphological Transformation Morphological Transformations Theory Erosion : 제거 Dilation : 확장 Opening : Erosion → Dilation Closing : Dilation → Erosion Function cv2.erod() : Erosion cv2.dilate() : Dilation cv2.morphologyEx() : Opening / Closing (매개변수를 이용하여 무엇을 선택할지 지정) structing element 원하는 이미지를 스캔하여 특정 부분에 대하여 "Erosion/Dilation/Opening/Closing" 할 때 사용할 kernel(filter)을 만들어 줌 cv2.getStructuringElement(shape,ksize) cv2.getStru..
[OpenCV] 문제지에서 문제 크롭(1) 목표) 문제집의 특정 페이지를 넣으면 문제만 크롭해서 저장하기 input : 수능완성 페이지 (png) output) 24~29번까지 문제 별개로 크롭된 이미지 이미지를 크롭하기 위해서는 이미지 단순화, 제거, 보정을 통해 형태를 파악해야하기 때문에 OpenCV에서 제공하는 Morphological Transformations 기능을 이용해야한다 아래글을 먼저 참고해서 숙지해야함 iagreebut.tistory.com/73 [OpenCV]Morphological Transformation Morphological Transformations Theory Erosion : 제거 Dilation : 확장 Opening : Erosion → Dilation Closing : Dilation → Erosion ..
[OpenCV] 이미지 이진화 이미지 불러오기 def contour(): #이미지 imgfile = '/gdrive/MyDrive/cropStudy/problem.png' #원본 이미지 img = cv2.imread(imgfile) 이미지를 흑백으로 만들기 이미지를 흑백으로 만들어주면 연산량이 적고, 흑백이미지도 edge detection에 무리 없기 때문에 진행하는 과정 cvtColor : 이미지의 색 변경 #흑백 이미지 imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cvtColor : 이미지의 색을 변경해주는 함수 cvtColor(image : 변경할 이미지 파일 경로 , flag : 어떤방식으로 변경할지 ) 정확하게 말하면, 이미지의 색 공간을 바꾸는 함수이며 flag는 어떤 색 공간으로 바..

728x90