C++ opencv把蓝底照片转化为白底照片

C++ opencv把蓝底照片转化为白底照片本文系转载 出处 http blog csdn net article details includeopenc opencv hpp includeopenc core core hpp includeopenc highgui highgui hpp includeopenc imgproc imgpro

本文系转载,出处:http://blog.csdn.net/_/article/details/。

#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<<"图像载入出现问题"< 
  
    return 
   0; } Mat roi=image(Rect( 
   20, 
   20, 
   20, 
   20)); Mat hsvImg; cvtColor(image, hsvImg, CV_BGR2HSV); 
   //将图像转换到HSV颜色空间 
   //分离HSV空间,v[0]为H色调,v[1]为S饱和度,v[2]为v灰度 
   vector 
     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 
     
       for( 
      int i= 
      0; i 
      
        //以H.S两个通道做阈值分割,把蓝色替换成红色 
       if((v[ 
       0].at 
       
         (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))< 
              
              //红色底 
              //v[0].at 
               
                 (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))< 
                  
                    } } } Mat finImg; merge(v,finImg); Mat rgbImg; cvtColor(finImg,rgbImg, CV_HSV2BGR); 
                   //将图像转换回RGB空间 imshow(origin,image); imshow(window,rgbImg); 
                   //加个滤波把边缘部分的值滤掉(此处应该用低通滤波器,但感觉不太好,还是不用了。) Mat result; GaussianBlur(rgbImg,result,Size( 
                   3, 
                   3), 
                   0.5); imshow(window,result); imwrite( 
                   "new.jpg",result); waitKey( 
                   0); 
                   //system("pause"); 
                   return 
                   0; } 
                   
                  
                
               
              
             
           
          
         
        
       
      
     
    
  

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

这里写图片描述

这里写图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217158.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午10:13
下一篇 2026年3月18日 上午10:13


相关推荐

  • 如何科学高效的学习Web前端开发?[通俗易懂]

    近几年,web前端开发工程师越来越火了,薪资待遇也快接近后端开发工程师了。很多准备入行前端开发工程师的小伙伴们,不知道准备得怎么样了呢?有的朋友在想方设法的学习,争取在年后的金九银十能靠实力找到一份满意的工作!有的小伙伴在准备准备回家过个团圆年,来年再战!还有的小伙伴很迷茫,想学前端,却没有方向!这篇文章,就是教你零基础如何高效的学习web前端。web前端开发(也称为客户端开发)主要是通过html,css,JavaScript,ajax,DOM等前端技术,实现网站在客服端的正确显示及交互功能。在早期.

    2022年4月12日
    65
  • pycharm怎么设置注释颜色_pycharm调颜色

    pycharm怎么设置注释颜色_pycharm调颜色”””代码块注释”””单行注释颜色设置Preferences–>Editor–>CorlorScheme–>Python–LineComment多行注释颜色设置: 1)修改函数内部代码块说明颜色Preferences–>Editor–>CorlorScheme–>Python–Docstring–>Text2)修改多行注释颜色Preferences–>…

    2022年8月28日
    5
  • textarea文本域宽度和高度(width、height)自己主动适应变化处理[通俗易懂]

    textarea文本域宽度和高度(width、height)自己主动适应变化处理[通俗易懂]文章来源:http://www.cnblogs.com/jice/archive/2011/08/07/2130069.htmltextarea宽度、高度自己主动适应处理方法150)?'15

    2022年8月1日
    11
  • 在Origin绘图和表格中插入Latex公式

    在Origin绘图和表格中插入Latex公式关于Origin与Latex结合应用下载:originlatexapp下载使用教程origin安装app教程官方教程参考https://baijiahao.baidu.com/s?id=1666395737690093701&wfr=spider&for=pc

    2022年5月31日
    68
  • 教你在PyCharm编辑器中添加库

    教你在PyCharm编辑器中添加库文章目录前面的话关于此文的起因原来是这样 正文 第 1 步点击 File 第 2 步点击 Settings 第 3 步选择 ProjectInter 看到右边的列表了吗 这里显示你已安装的库第 4 步点击最右面的加号第 5 步找到上面的输入框第 6 步输入你要安装的库 比如我的 requests 库 第 7 步如果你输的库名正确 且在 Python 库存中有这个需要安装的库 那么右面会直接弹出相关信息 这时点

    2026年3月27日
    2
  • 通达信客户端程序化下单

    通达信客户端程序化下单通达信是股票市场上最常用的客户端之一 几乎所有的券商都有通达信客户端 而很多朋友在盘中都想有一个自己的下单程序 下面从 2 方面探讨一下通过通达信自动化下单的办法 一 利用模拟按键类程序利用通达信的客户端界面本身 获取各个控件的类型和实例名 通过 AUTOIT 等脚本程序实现通达信客户端的自动化下单 此种方法简单方便 都是通过 windows 的库函数的调用来模拟消息 从而实现自动化下单 但是此方法只

    2026年3月17日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号