C++ opencv实现的把蓝底照片转化为白底照片功能完整示例

本文实例讲述了C++ opencv实现的把蓝底照片转化为白底照片功能。分享给大家供大家参考,具体如下:

#include 
#include 
#include 
#include 
using namespace std;
using namespace cv;//包含cv命名空间
int main()
{
 char *origin="Original";
 char *window="Image";
 char *str="G:\\yay.jpg";
 namedWindow(origin,1);
 namedWindow(window,1);
 Mat image=imread(str);
 if(!image.data)
 {
  cout<<"图像载入出现问题"< v;
 split(hsvImg,v);
 Mat roiH=v[0](Rect(20,20,20,20));
 Mat roiS=v[1](Rect(20,20,20,20));
 int SumH=0;
 int SumS=0;
 int avgH, avgS;//蓝底的平均色调和平均饱和度
 //取一块蓝色背景,计算出它的平均色调和平均饱和度
 for(int i=0; i<20; i++)
 {
  for(int j=0; j<20; j++)
  {
   /*SumH=SumH+roiH(i,j);*/
   SumH=int(roiH.at(j,i))+SumH;
   SumS=int(roiS.at(j,i))+SumS;
  }
 }
 avgH=SumH/400;
 avgS=SumS/400;
 //遍历整个图像
 int nl=hsvImg.rows;
 int nc=hsvImg.cols;
 int step=10;
 for(int j=0; j(j,i))<=(avgH+5) && v[0].at(j,i)>=(avgH-5)
    &&(v[1].at(j,i))<=(avgS+40) && v[1].at(j,i)>=(avgS-40))
   {
    //cout<(j,i))<(j,i)=0;
    //白色底
    v[0].at(j,i)=0;
    v[1].at(j,i)=0; //V[0]和V[1]全调成0就是变成白色
    //绿色底
    //v[0].at(j,i)=60;
    //蓝色底
    //v[0].at(j,i)=120;
    /*cout<(j,i))< 
 

这个效果比之前要好,图片对比:

C++ opencv实现的把蓝底照片转化为白底照片功能完整示例_第1张图片

C++ opencv实现的把蓝底照片转化为白底照片功能完整示例_第2张图片

参考文章:https://www.jb51.net/article/176326.htm

希望本文所述对大家C++程序设计有所帮助。

你可能感兴趣的:(C++ opencv实现的把蓝底照片转化为白底照片功能完整示例)