数日前、新しいOpenCV-Pythonインターフェイスcv2
を使い始めました。OpenCV-Pythonインターフェイス、cvとcv2の性能比較
私の質問は、cv
とcv2
インターフェイスの比較に関するものです。
使いやすさに関しては、新しいcv2
インターフェイスははるかに向上しました。cv2
で作業するのは簡単で楽しいです。
しかし、スピードはどうですか?
小さなコードスニペットをcv
に、もう1つをcv2
に設定して、パフォーマンスを確認しました。 ==
import time
import numpy as np
import cv2
gray = cv2.imread('sir.jpg',0)
width = gray.shape[0]
height = gray.shape[1]
h = np.empty([width,height,3])
t = time.time()
for i in xrange(width):
for j in xrange(height):
if gray[i,j]==127:
h[i,j]=[255,255,255]
elif gray[i,j]>127:
h[i,j]=[0,0,255-gray[i,j]]
else:
h[i,j]=[gray[i,j],0,0]
t2 = time.time()-t
print "time taken = ",t2
:
cv2 interface
:以下の両方、同じ機能を行い、画像のアクセス画素、それをテストし、いくつかの変更を行う、等
コードであります========================================== =
結果:
かかる時間= 14.4029130936
======================================= ===============
CVインタフェース:
import cv,time
gray = cv.LoadImage('sir.jpg',0)
h = cv.CreateImage(cv.GetSize(gray),8,3)
t=time.time()
for i in xrange(gray.width):
for j in xrange(gray.height):
k = cv.Get2D(gray,j,i)[0]
if k==127:
cv.Set2D(h,j,i,(255,255,255))
elif k>127:
cv.Set2D(h,j,i,(0,0,255-k))
else:
cv.Set2D(h,j,i,(k,0,0))
t2 = time.time()-t
print "time taken = ",t2
cv.ShowImage('img',h)
cv.WaitKey(0)
================= ===================
結果は次のとおりです。
撮影時間= 1.16368889809
==================== ===============
ここでは、古いcv
は約12 times faster
で、cv2
よりも大きくなります。結果として得られる画像も同じです。 (入力画像のサイズは720x540です)
どうしてですか?
cv2はcvに比べて遅いですか?
ここに間違いがありますか?上記のコードでは、cv2にはより高速なメソッドがありますか?
答えをありがとう。詳細をいくつか追加できますか?あなたは上記の手順、より速いnumpy関数などのためのより良い方法を知っていますか? –
@arkiaz、あなたのcv2 forループバージョンを変更しましたが、今はcvバージョンと同じ速度です。さらにスピードアップするためにnumpyバージョンを追加しました。 – HYRY
おかげさまで、最初の方法はcvに匹敵する速度を提供しますが、コードは少し大きくなります。私の画像 't = 1.127'で得られた結果。しかし、あなたの2番目の方法は 't = 0.054'という非常に良い結果をもたらしますが、大きな黒い画面(つまり間違った出力)を与えます。それはなぜです? –