C++ opencv实现的把蓝底照片转化为白底照片功能完整示例
本文实例讲述了C++opencv实现的把蓝底照片转化为白底照片功能。分享给大家供大家参考,具体如下:
#include#include #include #include usingnamespacestd; usingnamespacecv;//包含cv命名空间 intmain() { char*origin="Original"; char*window="Image"; char*str="G:\\yay.jpg"; namedWindow(origin,1); namedWindow(window,1); Matimage=imread(str); if(!image.data) { cout<<"图像载入出现问题"< v; split(hsvImg,v); MatroiH=v[0](Rect(20,20,20,20)); MatroiS=v[1](Rect(20,20,20,20)); intSumH=0; intSumS=0; intavgH,avgS;//蓝底的平均色调和平均饱和度 //取一块蓝色背景,计算出它的平均色调和平均饱和度 for(inti=0;i<20;i++) { for(intj=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; //遍历整个图像 intnl=hsvImg.rows; intnc=hsvImg.cols; intstep=10; for(intj=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))< 这个效果比之前要好,图片对比:
参考文章:https://www.nhooo.com/article/176326.htm
希望本文所述对大家C++程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。