私は以下のイメージを取って、白い形をトレースし、結果のパスをpdfにエクスポートしようとしています。私が持っている問題は、findContoursが見えるのは、形状の端に沿った点しか見つけられないということです。 findContoursと同様に、形状の曲線を検出し、曲線があるところでその点をスプラインで置き換えるソリューションがありますか?私がscipy.interpolateを使用すると、直線を無視し、輪郭全体を一つの大きな湾曲した形に変えます。私は両方のことをする何かが必要です。OpenCV findContoursと同様の機能があり、カーブを検出してポイントをスプラインに置き換えますか?
import numpy as np
import cv2
from scipy.interpolate import splprep, splev
from pyx import *
import matplotlib.pyplot as plt
#read in image file
original = cv2.imread('test.jpg')
#blur the image to smooth edges
im = cv2.medianBlur(original,5)
#threshold the image
imgray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,170,255,cv2.THRESH_BINARY)
#findContours
im2, contours, hierarchy = cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_\
APPROX_SIMPLE)
#drawContours
cv2.drawContours(original, [approx], -1, (0,255,0), 3)
cv2.imshow("Imageee", original)
cv2.waitKey(0)
この[スレッド](https://stackoverflow.com/questions/31464345/fitting-a-closed-curve-to-a-set-of-points)は役に立ちますか? – ZdaR
そのスレッド@ ZdaRのソリューションは、パターン全体を丸くします。私はopが外側の端に直線を探し、必要なところで湾曲していると思う。 –
1つの解決策は、凸包を構成する輪郭の点を取ることであり、これは曲線に適合する必要のない点に対応する。左の点は曲線からの点になり、その部分だけにスプラインを当てることができます。 –