You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Python BRISQUE分数与OpenCVSharp BRISQUE分数匹配

问题:OpenCVSharp与Python OpenCV的BRISQUE分数对齐问题

目标

让同一图像在OpenCVSharp和Python OpenCV中计算得到的BRISQUE分数完全一致。

核心问题

两个平台对BRISQUE依赖的模型文件、范围文件格式要求不同且不兼容,目前找不到格式转换方法,也不清楚Python端文件的数据来源,无法生成OpenCVSharp兼容的yml格式文件,求指引方向。

细节说明

  • Python端:使用brisque包自带的模型文件svm.txt和归一化文件normalize.pickle,文件路径在opencv-env2\Lib\site-packages\brisque\brisque.py中指定,存储于opencv-env2\Lib\site-packages\brisque\models目录下。
  • OpenCVSharp端:需要yml格式的模型和范围文件,调用QualityBRISQUE.Compute()方法时传入这两个文件路径。
  • 模型文件差异:两者均为明文格式,但结构、数值差异明显,需要将Python的svm.txt转换为OpenCVSharp兼容的yml格式。
  • 范围文件差异:推测Python的二进制格式normalize.pickle对应OpenCVSharp的文本格式yml范围文件,但不清楚如何进行格式转换。

示例代码

Python计算BRISQUE分数代码

import cv2
from brisque import BRISQUE

iobj = BRISQUE(url=False)         

Iin = cv2.imread("c:\\temp\\temp.jpg");
score = int(iobj.score(Iin))
print("Score is " + str(score))

C#(OpenCVSharp)计算BRISQUE分数代码

需先安装NuGet包:OpenCvSharp4、OpenCvSharp4.runtime.win、OpenCvSharp4.Windows

static void Main(string[] args)
{
    const string modelFile = "OpenCVSharp\\brisque_model_live.yml";
    const string rangeFile = "OpenCVSharp\\brisque_range_live.yml";
    Mat img = Cv2.ImRead("c:\\temp\\temp.jpg", ImreadModes.AnyColor);
    
    Scalar scoreScaler = QualityBRISQUE.Compute(img, modelFile, rangeFile);
    double score = scoreScaler[0];
    
    Console.WriteLine("Score: " + score.ToString());
}

测试结果

使用同一张棋盘格地板反射图像测试,Python计算得分为59,OpenCVSharp计算得分为37.6。

内容的提问来源于stack exchange,提问作者Matt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 21:29:50