• 大小: 5KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-16
  • 语言: C/C++
  • 标签:

资源简介

使用了opencv2411,检测图片的清晰度,色差,色偏,亮度。代码在vs2013中直接可以运行

资源截图

代码片段和文件信息


#include “stdafx.h“

#include “opencv2/objdetect/objdetect.hpp“
#include “opencv2/highgui/highgui.hpp“
#include “opencv2/imgproc/imgproc.hpp“

#include 
#include 
#include
#include 
#include 

using namespace std;
using namespace cv;

/******************************************************************************** 
*函数描述:  DefRto 计算并返回一幅图像的清晰度    
*函数参数: frame  彩色帧图 
*函数返回值:double   清晰度表示值,针对该视频,大于20较好           
*********************************************************************************/  
double DefRto(Mat frame)  
{  
Mat gray;  
cvtColor(framegrayCV_BGR2GRAY);  
IplImage *img = &(IplImage(gray));  
double temp = 0;  
double DR = 0;  
int ij;//循环变量  
int height=img->height;  
int width=img->width;  
int step=img->widthStep/sizeof(uchar);  
uchar *data=(uchar*)img->imageData;  
double num = width*height;  

for(i=0;i {  
for(j=0;j {  
temp += sqrt((pow((double)(data[(i+1)*step+j]-data[i*step+j])2) + pow((double)(data[i*step+j+1]-data[i*step+j])2)));  
temp += abs(data[(i+1)*step+j]-data[i*step+j])+abs(data[i*step+j+1]-data[i*step+j]);  
}  
}  
DR = temp/num;  
return DR;  
}  



/******************************************************************************************** 
*函数描述:  calcCast    计算并返回一幅图像的色偏度以及,色偏方向    
*函数参数:  InputImg    需要计算的图片,BGR存放格式,彩色(3通道),灰度图无效 
*           cast        计算出的偏差值,小于1表示比较正常,大于1表示存在色偏 
*           da          红/绿色偏估计值,da大于0,表示偏红;da小于0表示偏绿 
*           db          黄/蓝色偏估计值,db大于0,表示偏黄;db小于0表示偏蓝 
*函数返回值: 返回值通过cast、da、db三个应用返回,无显式返回值 
*********************************************************************************************/  
void colorException(Mat InputImgfloat& castfloat& dafloat& db)  
{  
Mat LABimg;  
cvtColor(InputImgLABimgCV_BGR2Lab);//参考http://blog.csdn.net/laviewpbt/article/details/9335767  
//由于OpenCV定义的格式是uint8,这里输出的LABimg从标准的0~100,-127~127,-127~127,被映射到了0~255,0~255,0~255空间  
float a=0b=0;  
int HistA[256]HistB[256];  
for(int i=0;i<256;i++)  
{  
HistA[i]=0;  
HistB[i]=0;  
}  
for(int i=0;i {  
for(int j=0;j {  
a+=float(LABimg.at(ij)[1]-128);//在计算过程中,要考虑将CIE L*a*b*空间还原 后同  
b+=float(LABimg.at(ij)[2]-128);  
int

评论

共有 条评论

相关资源