一、环境
1、Qt5.5.1;
2、opencv3.0;
3、visual studio 2013.
二、核心代码
1、图像处理部分
//调节图像的色相、饱和度、明度
bool CvImageAdjust::AddHSV(const QImage& inImg, QImage& outImg, double dH, double dS, double dV)
{
bool bResult = false;
QImage imgSrc = inImg.copy();
IplImage *lImage = CImageConvert::ConvertToIplImage(imgSrc);
cvCvtColor(lImage, lImage, CV_BGR2HSV);
int i;
uchar lut[256][3];
CvMat* lut_mat;
lut_mat = cvCreateMatHeader(1, 256, CV_8UC3);
cvSetData(lut_mat, lut, 0);
for (i = 0; i < 256; i++)
{
int h = (i + dH);
if (h > 180)
{
h -= 180;
}
else if (h < 0)
{
h += 180;
}
int s = (i + dS);
if (s < 0)
s = 0;
if (s > 255)
s = 255;
int v = (i + dV);
if (v < 0)
v = 0;
if (v > 255)
v = 255;
lut[i][0] = (uchar)h;
lut[i][1] = (uchar)s;
lut[i][2] = (uchar)v;
}
cvLUT(lImage, lImage, lut_mat);
cvCvtColor(lImage, lImage, CV_HSV2BGR);
QImage imgRult = CImageConvert::ConvertToQImage(lImage);
CImageConvert::AddAlpha(inImg, imgRult);
outImg = imgRult;
cvReleaseImage(&lImage);
bResult = true;
return bResult;
}
//自动调节图片色彩到目标值,取出H\S\V值
bool CvImageAdjust::AutoAdjustHsv(QImage& imgGoal, QImage& img_ave, double& dH, double& dS, double& dV)
{
if (imgGoal.width() <= 0
|| imgGoal.height() <= 0
|| img_ave.width() <= 0
|| img_ave.height() <= 0)
{
return false;
}
//创建AVG_S
QImage avgImage(QSize(1, 1), QImage::Format_ARGB32);
QRgb rgb = imgGoal.pixel(82 / 512.0 * imgGoal.width(), 162 / 512.0 * imgGoal.height());
avgImage.setPixel(0, 0, rgb);
//计算参考H,S,L值
int H_src, S_src, L_src;
CImageConvert::RGB2HSL_INT(qRed(rgb), qGreen(rgb), qBlue(rgb), H_src, S_src, L_s