8

一時的な img なしで cv2.absdiff(img1, img2).sum() を計算することは可能ですか?

ビデオ ストリームがあり、処理の開始時にある種の画像安定化が必要です。absdiff は、次の 2 つの画像を使用して異なる配置ベクトルをチェックすると、高速でエラーに依存する結果を返しますが、img.sum() の計算にのみ使用される一時画像を作成、書き込み、読み取る必要があります。したがって、これらのメモリ割り当て、書き込み、読み取りの手順を省略しても問題ありません。

def calcMatch(img1, img2):
    diff = cv2.absdiff(img1, img2)
    return diff.sum()

Pythonでの解決策

import cv2
import time

img = cv2.imread('test.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img1 = img[10:330, 10:870]
img2 = img[20:340, 20:880]

start = time.clock()
d = cv2.absdiff(img1, img2)
s = d.sum()
t = time.clock() - start
print 'with absdiff ', t
print s

start = time.clock()
s = cv2.norm(img1, img2, cv2.NORM_L1)
t = time.clock() - start
print 'with norm L1 ',  t
print s

私のラップトップと同じように、非常に安定した比率で大幅な速度向上
が 得 られ ます


4

1 に答える 1

6

norm関数をNORM_L1ノルムで試してください。C++ コード:

double res = cv::norm(img1, img2, cv::NORM_L1);
于 2013-07-24T09:32:12.283 に答える