이미지에서 A4 인쇄를 잘라냅니다.
이미지에서 A4 인쇄를 잘라냅니다.
사진에 존재하는 인쇄물을 바로 위의 시점에서 잘라낸 이미지로 변환합니다.
위 사진을 아래 사진으로 변환할 수 있습니다.
코드에 대한 주의
코드
cutting_a4.py#カラー画像を受け取って紙を切り取って返す
def cutting_paper(img):
x = 2000 #切り取り後のx座標
y = int(x*1.415)
img_gray = gray(img)
#2値化
ret,img_th1 = cv2.threshold(img_gray,220,255,cv2.THRESH_TOZERO_INV)
img_not = cv2.bitwise_not(img_th1)
ret,img_th2 = cv2.threshold(img_not,0,255, cv2.THRESH_BINARY | cv2.THRESH_OTSU )
#輪郭抽出
contours, hierarchy = cv2.findContours(img_th2, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
#2番目にでかい四角が紙の輪郭なのでpaper_tapを取り出す
pic_tap = None #画像の輪郭
paper_tap = None #紙の輪郭
for i, con in enumerate(contours):
size = cv2.contourArea(con)
if pic_tap is None:
pic_tap = (con,size)
continue
if pic_tap[1] <= size:
pic_tap = (con,size)
continue
elif paper_tap is None:
paper_tap = (con,size)
elif paper_tap[1] <= size:
paper_tap = (con,size)
#直線近似して描画
epsilon = 0.1*cv2.arcLength(paper_tap[0],True)
paper_corners= cv2.approxPolyDP(paper_tap[0],epsilon,True)#紙の頂点座標
fix_con = np.array([[[0,0]],[[x,0]],[[x,y]],[[0,y]]], dtype="int32")#整形後のサイズ
M = cv2.getPerspectiveTransform(np.float32(paper_corners),np.float32(fix_con))#変換行列の生成
img_trans = cv2.warpPerspective(img,M,(x,y))#変換
return img_trans
img = cv2.imread('input.png',-1)
cv2.imwrite("output.png", img)
plt.imshow(plt.imread("output.png"))
Reference
이 문제에 관하여(이미지에서 A4 인쇄를 잘라냅니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/teruto725/items/5ba4c81e53e7d00ccfd1
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#カラー画像を受け取って紙を切り取って返す
def cutting_paper(img):
x = 2000 #切り取り後のx座標
y = int(x*1.415)
img_gray = gray(img)
#2値化
ret,img_th1 = cv2.threshold(img_gray,220,255,cv2.THRESH_TOZERO_INV)
img_not = cv2.bitwise_not(img_th1)
ret,img_th2 = cv2.threshold(img_not,0,255, cv2.THRESH_BINARY | cv2.THRESH_OTSU )
#輪郭抽出
contours, hierarchy = cv2.findContours(img_th2, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
#2番目にでかい四角が紙の輪郭なのでpaper_tapを取り出す
pic_tap = None #画像の輪郭
paper_tap = None #紙の輪郭
for i, con in enumerate(contours):
size = cv2.contourArea(con)
if pic_tap is None:
pic_tap = (con,size)
continue
if pic_tap[1] <= size:
pic_tap = (con,size)
continue
elif paper_tap is None:
paper_tap = (con,size)
elif paper_tap[1] <= size:
paper_tap = (con,size)
#直線近似して描画
epsilon = 0.1*cv2.arcLength(paper_tap[0],True)
paper_corners= cv2.approxPolyDP(paper_tap[0],epsilon,True)#紙の頂点座標
fix_con = np.array([[[0,0]],[[x,0]],[[x,y]],[[0,y]]], dtype="int32")#整形後のサイズ
M = cv2.getPerspectiveTransform(np.float32(paper_corners),np.float32(fix_con))#変換行列の生成
img_trans = cv2.warpPerspective(img,M,(x,y))#変換
return img_trans
img = cv2.imread('input.png',-1)
cv2.imwrite("output.png", img)
plt.imshow(plt.imread("output.png"))
Reference
이 문제에 관하여(이미지에서 A4 인쇄를 잘라냅니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/teruto725/items/5ba4c81e53e7d00ccfd1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)