3

これは輪郭だけをぼかしますが、遅いです。もっと速い方法はありますか?

#img is the image
#cnt is a contour
#blur is a blurred copy of the image

temp = np.zeros(img.shape,np.uint8)
cv2.drawContours(temp,[cnt],0,255,-1)
pp = np.transpose(np.nonzero(temp))   #all pixelpoints in contour

for k in range(0, len(pp)):
  img[ pp[k,0],pp[k,1] ] = blur[ pp[k,0],pp[k,1] ]

詳細の追加: 高速化したい操作の一般的なタイプは次のとおりです。一部の入力画像に対して、画像のコピーをぼかし (または他の方法でフィルター処理)、ぼかしたコピーで輪郭を見つけ、輪郭内のすべてのピクセルのみをコピーします。元の画像。

Python では for ループが比較的遅いことを読みました。numpy.whereは、このためのツールのように見えます。構文について教えてください。これは動作しません:

img = np.where([temp != 0], ぼかし, img)

編集: これは機能し、最初のコード ブロックの 2 倍の速さです。

#img is the image
#cnt is a contour
#blur is a blurred copy of the image
temp = np.zeros(img.shape,np.uint8)
cv2.drawContours(temp,[cnt],0,255,-1)
x = np.where(temp == 0)
img[x] = blur[x]

操作をさらに高速化する方法はありますか?

4

0 に答える 0