怎么在c++中使用opencv把蓝底照片转化为白底照片

  介绍

本篇文章给大家分享的是有关怎么在c++中使用opencv把蓝底照片转化为白底照片,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

具体如下:

# include  & lt; opencv2/opencv.hpp>   # include  & lt; opencv2/核心/core.hpp>   # include  & lt; opencv2/highgui/highgui.hpp>   # include  & lt; opencv2/imgproc/imgproc.hpp>   using  namespace 性传播疾病;   using  namespace 简历;//包含简历命名空间   int  main ()   {   ,char  *起源=癘riginal";   ,char  *窗口=癐mage";   ,char  * str=癎: \ \ yay.jpg";   ,namedWindow(起源、1);   ,namedWindow(窗口,1);   ,Mat 图像=imread (str);   ,如果(! image.data)   ,{   cout<才能;& lt;“图像载入出现问题“& lt; & lt; endl;   return 才能;0;   ,}   ,Mat 投资回报率=图像(矩形(20、20、20、20));   ,Mat  hsvImg;   ,cvtColor (hsvImg,形象,还以为;CV_BGR2HSV);,//将图像转换到HSV颜色空间   ,//分离HSV空间,v[0]为H色调,v[1]为年代饱和度,v[2]为灰度   ,vector v;   ,分裂(hsvImg, v);   ,Mat  roiH=v[0](矩形(20、20、20、20));   ,Mat  roi=v[1](矩形(20、20、20、20));   ,int  SumH=0;   ,int 金额=0;   ,int  avgH, avg;//蓝底的平均色调和平均饱和度   ,//取一块蓝色背景,计算出它的平均色调和平均饱和度   ,(int  i=0;, i<20;,我+ +)   ,{   的才能(int  j=0;, j<20;, j + +)   {才能   ,,/* SumH=SumH + roiH (i, j); */,,SumH=int (roiH.at (j,我))+ SumH;   ,,金额=int (roiS.at (j,我))+总结;   ,,}   ,}   ,avgH=SumH/400;   ,avg=金额/400;   ,//遍历整个图像   问,int =hsvImg.rows;   ,int 数控=hsvImg.cols;   ,int =10步;   ,(int  j=0;, j<问;,j + +)   ,{   的才能(int  i=0, i<数控;,我+ +)   {才能   ,,//以h两个通道做阈值分割,把蓝色替换成红色   ,,如果((v [0] .at(我)j) & lt;=(avgH + 5),,,, v [0] .at (j, i)在=(avgH-5)   ,,,,,(v [1] .at(我)j) & lt;=(avg + 40),,,, v [1] .at (j,我)祝辞=(avgS-40))   ,,{   ,,,//cout<& lt; int (v [0] .at(我)j) & lt; & lt; endl;   ,,,//红色底   ,,,//v [0] .at (j, i)=0;   ,,,//白色底   ,,,v [0] .at (j, i)=0;   ,,,v [1] .at (j,我)=0,,//v[0]和[1]全调成0就是变成白色   ,,,//绿色底   ,,,//v [0] .at (j, i)=60;   ,,,//蓝色底   ,,,//v [0] .at (j, i)=120;   ,,,/* cout<& lt; int (v [0] .at(我)j) & lt; & lt; endl; */,,}   ,,}   ,}   ,Mat  finImg;   ,合并(v, finImg);   ,Mat  rgbImg;   ,cvtColor (finImg rgbImg, CV_HSV2BGR);,//将图像转换回RGB空间   ,imshow(起源、图像);   ,imshow(窗口,rgbImg);   ,//加个滤波把边缘部分的值滤掉(此处应该用低通滤波器,但感觉不太好,还是不用了)。   ,Mat 结果;   ,高斯模糊(rgbImg,结果,大小(3、3),0.5);   ,imshow(窗口,结果);   ,imwrite (“new.jpg",结果);   ,waitKey (0);   ,//系统(“pause");   ,return  0;   }

以上就是怎么在c++中使用opencv把蓝底照片转化为白底照片,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

怎么在c++中使用opencv把蓝底照片转化为白底照片