擅长:python、mysql、java
<p>您可以检查c++<a href="http://docs.opencv.org/2.4.10/doc/tutorials/highgui/video-input-psnr-ssim/video-input-psnr-ssim.html?highlight=video" rel="nofollow">Video Input with OpenCV and similarity measurement</a>的示例</p>
<p>这为您正在寻找的内容提供了参考。
我对Python不是很熟悉,但是由于opencv保持了相同的功能性,所以我认为yu可以从c++的例子中推断出来。在</p>
<p>最常用的算法是PSNR(又名峰值信噪比)。在</p>
<pre><code>double getPSNR(const Mat& I1, const Mat& I2)
{
Mat s1;
absdiff(I1, I2, s1); // |I1 - I2|
s1.convertTo(s1, CV_32F); // cannot make a square on 8 bits
s1 = s1.mul(s1); // |I1 - I2|^2
Scalar s = sum(s1); // sum elements per channel
double sse = s.val[0] + s.val[1] + s.val[2]; // sum channels
if( sse <= 1e-10) // for small values return zero
return 0;
else
{
double mse =sse /(double)(I1.channels() * I1.total());
double psnr = 10.0*log10((255*255)/mse);
return psnr;
}
}
</code></pre>
<p>但是如果你想要一个结构上的相似性,你可以使用下面的OpenCV实现。在</p>
^{pr2}$
<p>需要注意的是,由于你是逐帧(2个图像)比较,你必须循环视频以获得相应的对。在</p>