如何让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
相关产品推荐
相关产品推荐

