import cv2 import numpy as np from IPython.display import display, Image img = cv2.imread("rinkaku.png") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 二値化 ret,th1 = cv2.threshold(gray,200,255,cv2.THRESH_BINARY) cv2.imwrite("rinkaku1.png", th1) contours, hierarchy = cv2.findContours(th1, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 面積の大きいもののみ選別 areas = [] for cnt in contours: area = cv2.contourArea(cnt) if area > 10000: epsilon = 0.1*cv2.arcLength(cnt,True) approx = cv2.approxPolyDP(cnt,epsilon,True) areas.append(approx) cv2.drawContours(img,areas,-1,(0,255,0),3) cv2.imwrite("rinkaku2.png", img)
この画像の黒枠の輪郭部分の4つの座標を決めて自動で射影変換したいです。
上のプログラムではコンパイルは通りますが紙自体を選別しているのか画面が真っ暗になって何も選別できませんでした。
何が原因でしょうか?
ちなみにこれを選別するために黒の枠だけを抽出する方法も考えました。
dst1 = cv2.inRange(img, (0,0,0), (50,50,50))
コードとしてはこれです。
これらをうまく利用して枠無い部分だけを自動で表示するやり方はないでしょうか?
調べたところ
pts1 = np.float32(areas[0]) pts2 = np.float32([[600,300],[600,0],[0,0],[0,300]]) M = cv2.getPerspectiveTransform(pts1,pts2) dst = cv2.warpPerspective(img,M,(600,300))
このコードで射影変換できるようですが、自ら座標を決めなければなりません、座標を自動で編み出す方法などないでしょうか???
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/18 15:00
2019/11/19 01:48