您的位置:首页 > 其它

根据图像色彩的背景确定阈值改变特定区域的饱和度

2016-11-14 16:54 337 查看
www.tzi.de/tzikeyer/keying_report.pdf

4.5 Auto Spill Removal

有改动。

cv::Mat hls_Img = hlsImg.clone();
cv::MatND hist;
int channels[] = { 0 };
int histSize[] = { 180 };
float hranges[] = { 0, 180 };
const float* ranges[] = { hranges };
calcHist(&hls_Img, 1, channels, cv::Mat(), hist, 1, histSize, ranges, true, false);
double maxVal = 0;
cv::Point maxloc;
minMaxLoc(hist, 0, &maxVal, 0, &maxloc);
hls_Img.convertTo(hls_Img, CV_32FC3);
float keycolor_h = float(maxloc.y) / 180.0f;
for (size_t i = 0; i < hls_Img.rows; i++)
{
for (size_t j = 0; j < hls_Img.cols; j++)
{
float deSatuFactor = 3.0f*sinf(2.0f * 3.1415f * (keycolor_h + (0.25f - hls_Img.at<cv::Vec3f>(i, j)[0] / 180.0f))) - 1.5f;
if (deSatuFactor > 1.0f)
{
hls_Img.at<cv::Vec3f>(i, j)[2] = hls_Img.at<cv::Vec3f>(i, j)[2] * (1.0f / (3.0f + deSatuFactor));
}
else if (deSatuFactor>0.7f && deSatuFactor<1.0f)
{
hls_Img.at<cv::Vec3f>(i, j)[2] = hls_Img.at<cv::Vec3f>(i, j)[2] * deSatuFactor;
}
}
}
hls_Img.convertTo(hls_Img, CV_8UC3);
cvtColor(hls_Img, keyedImg, CV_HLS2BGR);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: