画像処理の話題(私は初心者プログラマーです)のドキュメンテーションの数時間後、私はそれの背後にある数学をよりよく理解するために私自身のエッジ検出機能を実装したいと決めました。私は幸いにもそれを行うことができましたが、私のアルゴリズムはちょっと遅すぎます(O(n^2))。私は以下のフレーム処理の部分をコードに掲示します:このアルゴリズムを改善するにはどうすればよいですか? (画像処理)
ret, frame = cap.read()
grayed = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
rows, cols = grayed.shape
for row in range(rows-2):
for col in range(cols-2):
Gx = grayed.item(row+2,col)+2*grayed.item(row+2,col+1)+grayed.item(row+2,col+1)-(grayed.item(row,col)+2*grayed.item(row,col+1)+grayed.item(row,col+2))
Gy = grayed.item(row,col+2)+2*grayed.item(row+1,col+2)+grayed.item(row+2,col+1)-(grayed.item(row,col)+2*grayed.item(row+1,col)+grayed.item(row+2,col))
grad = math.sqrt(Gx**2 + Gy**2)
grayed.itemset((row, col), grad)
cv2.imshow('frame', grayed)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
ありがとうございます!
私はPythonのエキスパートではありませんが、ndarrayを使用するようになりました。 – FiReTiTi
この関数に渡すデータの種類について詳しく知りたいですか?たぶん、小さな例を投稿してください。私はあなたがnumpyかnumpyとCythonの組み合わせを使ってこれを大幅にスピードアップできると信じています。 Cythonを使用すると、Cの速度に近くなります。これはもちろん、アルゴリズムの実行時間を変更するだけですが、それでもO(n^2)になります。 –
投稿を編集しました。私は、手を触れられていないフレームの代わりにグレースケールの画像を使い始めました。それは私のプロセスを少しスピードアップしました。また、カーネルの作成は全く役に立たなかったので削除しました。問題はまだ十分に速くないということです。 –