OpenCVのfitEllipseによる、画像に対する楕円フィッティングでのエラー
OpenCVのfitEllipseによって、python3で3900×3072 pix png画像の楕円フィッティングを行いたいと考えています。
入力画像は以下のサイトで配布されている眼底画像データセットに含まれる、AMD14ディレクトリ内部のものを使用します。
http://vampire.computing.dundee.ac.uk/vesselseg.html
最終的には中央の明るい領域において、非ゼロピクセル値の最も外側の領域に楕円形をフィッティングすることによって、マスクを作成することを目的にしています。
#楕円でフィッティングしてマスクを作る。
import numpy as np
import cv2
#楕円フィッティング
def create_ellipse(thresh,cnt):
ellipse = cv2.fitEllipse(cnt) #ここでエラーが出る
thresh = cv2.ellipse(thresh,ellipse,(0,255,255),2)
return thresh
#グレースケール化
def rgb_to_gray(src):
# チャンネル分解
b, g, r = src[:,:,0], src[:,:,1], src[:,:,2]
# R, G, Bの値からGrayの値に変換
gray = 0.2989 * r + 0.5870 * g + 0.1140 * b
return gray
#画像の読み込み
im = cv2.imread('AMD1.png')
#グレースケールに変換。この時点で輝度0がある。
gray = rgb_to_gray(im)
gray = cv2.convertScaleAbs(gray)
# 結果を出力
cv2.imwrite("gray.png", gray)
# 画像の高さ、幅を取得し、楕円の中央を算出
height = im.shape[0]
width = im.shape[1]
cnt = (width/2, height/2)
#フィッティング
im = np.float32(im)
thresh = create_ellipse(im,cnt)
これを走らせた所、以下のようなエラーが出てしまい、過去の質問等調べても解決方法が分からない次第です。
error Traceback (most recent call last)
<ipython-input-46-9f83929ab8df> in <module>()
36 #エラーの修正 https://github.com/eiichiromomma/CVMLAB/wiki/OpenCV-Memo
37 im = np.float32(im)
---> 38 thresh = create_ellipse(im,cnt)
<ipython-input-46-9f83929ab8df> in create_ellipse(thresh, cnt)
3
4 def create_ellipse(thresh,cnt):
----> 5 ellipse = cv2.fitEllipse(cnt) #ここでエラーが出る
6 #cv2.ellipse(画像, 中央座標, 長短軸, 回転角度, 円弧開始角度, 円弧終了角度, 色, 線の太さ)
7 #ex : cv2.ellipse(img, (width/2-200, height/2-300), (100, 50), 0, 0, 360, (0, 0, 255), 10)
error: OpenCV(3.4.3) /io/opencv/modules/imgproc/src/shapedescr.cpp:305: error: (-215:Assertion failed) n >= 0 && (depth == CV_32F || depth == CV_32S) in function 'fitEllipse'
参考にしたWebサイト
OpenCVのサイト
http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_imgproc/py_contours/py_contour_features/py_contour_features.html
http://opencv.jp/opencv-2svn/cpp/structural_analysis_and_shape_descriptors.html
Stack Overflowの質問
https://stackoverflow.com/questions/38530899/python-fit-ellipse-to-an-image
どうぞよろしくお願いいたします。