哪位大神能帮我解读一下代码 万分感谢

问题描述

哪位大神能帮我解读一下代码 万分感谢

有关色偏检测的

double operation::colorCastDetection(IplImage pFrame)
{

IplImage labFrame = cvCreateImage(cvGetSize(pFrame),pFrame->depth,pFrame->nChannels);
cvCvtColor(pFrame,labFrame,CV_BGR2Lab);

double da = 0;//色度a的平均值
double db = 0;//色度b的平均值
double D = 0;//图像平均色度
double Ma = 0;//色度a的方差
double Mb = 0;//色度b的方差
double M = 0;//色度的中心矩
double K = 0;//图像偏色因子
int height = labFrame->height;//图像高度
int width = labFrame->width;//图像宽度

uchar* labData = (uchar*)labFrame->imageData;
for(int i = 0;i < labFrame->height;i++)
{
    for(int j = 0;j < labFrame->width;j++)
    {
        da += labData[i * labFrame->widthStep + j * labFrame->nChannels + 1];
        db += labData[i * labFrame->widthStep + j * labFrame->nChannels + 2];

    }
}
da = da/height/width;
db = db/height/width;
D = sqrt(pow(da,2) + pow(db,2));

uchar* labData2 = (uchar*)labFrame->imageData;
for(int i = 0;i < labFrame->height;i++)
{
    for(int j = 0;j < labFrame->width;j++)
    {
        Ma += pow(labData2[i * labFrame->widthStep + j * labFrame->nChannels + 1]-da,2);
        Mb += pow(labData2[i * labFrame->widthStep + j * labFrame->nChannels + 2]-db,2);

    }
}
Ma = Ma/height/width;
Mb = Mb/height/width;
M = sqrt(pow(Ma,2) + pow(Mb,2));

K = D/M;
return K;

}

解决方案

http://www.cnblogs.com/Imageshop/p/3191853.html

看前面的理论部分就够了。
你代码这里前两行RGB到LAB的色彩空间转换。然后接下来的计算步骤和上面链接中的前面描述一样。
第一个for循环有疑问的话,因为是三通道图,按照lab顺序对图像进行存储,因此

 da += labData[i * labFrame->widthStep + j * labFrame->nChannels + 1];

中的+1代表提取a通道,+2代表提取b通道的值。(L通道没有用到,用到的话是 +0 )

时间: 2024-08-30 15:13:12

哪位大神能帮我解读一下代码 万分感谢的相关文章

c++-这段编程出现了这个问题,哪位大神能帮我详细解答一下,谢谢啦

问题描述 这段编程出现了这个问题,哪位大神能帮我详细解答一下,谢谢啦 问题:0x01054259 处有未经处理的异常: 0xC0000005: 读取位置 0x00000000 时发生访问冲突 代码: #include using namespace std; int main() { void swap(int *,int *); int *p1=NULL,*p2=NULL; swap(p1,p2); cout<<*p1<<" "<<*p2<&

c++-哪位大神能帮我讲解一下这个语句?id为什么是那么写的呢?

问题描述 哪位大神能帮我讲解一下这个语句?id为什么是那么写的呢? id1="select manage_pwd,manage_name,manage_position from manager where manage_id = '"+id+"';"; 最后的id格式为什么会有双引号加分号又有前后加号? 解决方案 id是一个变量,加上一个双引号表示字符串,单引号是sql语句中字符串表示方法

哪位大神能帮我看看这个关于python列表的相关问题?O(∩_∩)O谢谢

问题描述 哪位大神能帮我看看这个关于python列表的相关问题?O(∩_∩)O谢谢 看看b,c这两个数是否在a的这几组数的范围内,在j就加一,不再就不加 j=0 a = [[23, 26], [45, 67], [45, 69]] b = 34 c = 46 for i in a: if i[0] <= 某数 <=i[1]: 就输出j=j+1 同时打破这个循环 else: 比下一对还是回去执行? 像c这样的数,我不想遍历a,b不再这几组数的范围内,遍历就遍历吧.知道这么个意思,就是写不出来,打

java-哪位大神能帮帮忙解决下quartz问题

问题描述 哪位大神能帮帮忙解决下quartz问题 为啥**不用配置**JobDetailBean 可以使用quartz 网上好多quartz都要配置这东西,我的一个项目不用配置这东西,定时器照样使用,是默认调用吗? 配置文件 <bean name="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name=&

x-我是个菜鸟哪位大神帮我看看这个代码为什么怎么点击都不会执行下面的else 急急急

问题描述 我是个菜鸟哪位大神帮我看看这个代码为什么怎么点击都不会执行下面的else 急急急 iv.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // AB| = √[(x?-x?)?+(y?-y?)?],换成x?-x?和y?-y? switch (event.getAction()) { case MotionEvent.ACTION

求解-这段代码里的 and是什么意思?希望大神能逐句给解释下,万分感谢

问题描述 这段代码里的 and是什么意思?希望大神能逐句给解释下,万分感谢 这段代码里的 and是什么意思?希望大神能逐句给解释下,万分感谢 `` public List getList(int userId Pager pager) { String where = "" ""; if (0 < userId) { where = where + "" and t.userId = "" + userId; } ret

grunt-这是Gruntfile.js中的配置代码,求教大神帮我解释下,万分感谢

问题描述 这是Gruntfile.js中的配置代码,求教大神帮我解释下,万分感谢 这是watch插件的配置信息: watch: { options: { dateFormat: function (time) { grunt.log.writeln('The watch finished in ' + time + 'ms at' + (new Date()).toString()); grunt.log.writeln('Waiting for more changes...'); }, li

哪位大神能帮我看下这个简单的小程序

问题描述 头文件包括:#include<fstream>#include<stdio.h>#include<string.h>usingnamespacestd;代码:CStringstr;str.Format("%.5E",1);ofs<<str;输出结果:-5.48582E-132如果代码改为:CStringstr;str.Format("%.5E",1.0);ofs<<str;输出正确结果:1.000

哪位大神能帮我把下面这段C语言翻译成C#啊

问题描述 #include<stdio.h>#include<stdlib.h>#include<string.h>#include<malloc.h>#definemax32intifempty=0;//标志,判断链表是无否为空typedefstructdnode/*定义双向链表结构体*/{intnumber;/*货物编号*/charname[max];/*货物名称*/intfloatmoney;intcounter;/*货物数量*/structdnode