C++ 使用 OpenCV 实现证件照蓝底换成白底功能(或其他颜色如红色)详解
主要步骤为:
1. 把 RGB 图像转换到 HSV 空间
2. 取背景的一小块 20*20,计算蓝色背景的平均色调和饱和度
3. 设置阈值,取出蓝色背景替换为红色背景
4. 把 HSV 图像转换会 RGB 空间
5. 滤波器去除边缘效应
具体代码为:
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;int main()
{const char* origin = "original";const char* window = "image";const char* str = "image.jpg";Mat image = imread(str);if (!image.data){cout<<"image not load...."<<endl;return -1;}//imshow(origin,image);Mat roi = image(Rect(20,20,20,20));Mat hsvImg;cvtColor(image,hsvImg,CV_BGR2HSV);//色调 饱和度 灰度vector<Mat>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 = int(roiH.at<uchar>(j,i))+sumH; //统计感兴趣区域的总像素sumS = int(roiS.at<uchar>(j,i))+sumS;}}avgH = sumH /400;avgS = sumS /400;//遍历整个图像int Row = hsvImg.rows;int Col = hsvImg.cols;int step = 10;for (int i =0;i<Row;i++){for (int j = 0;j<Col;j++){//以HS两个通道做阈值分割,把蓝色替换成红色if (v[0].at<uchar>(j,i)<=(avgH+5) && v[0].at<uchar>(j,i)>=(avgH-5) &&v[1].at<uchar>(j,i)<=(avgS+40) && v[1].at<uchar>(j,i)>=(avgS-40)){//满足阈值范围的即为背景v[0].at<uchar>(j,i) = 0;//红色背景}}}Mat finImg;merge(v,finImg);Mat rgbImg;cvtColor(finImg,rgbImg,CV_HSV2BGR);imshow(origin,image);imshow(window,rgbImg);Mat result;GaussianBlur(rgbImg,result,Size(3,3),0.5);imshow("result",result);waitKey(0);return 0;
}
运行效果:
C++ 使用 OpenCV 实现证件照蓝底换成白底功能(或其他颜色如红色)详解相关推荐
- 怎样将蓝底照片换成白底
方法:美图秀秀 + java程序. 原来的照片是这样的: 1. 先用美图秀秀将面积较大的蓝底以及边缘比较光滑的部分先刷成白色,或者抠出来都行. 2. 用java程序将边缘部分的蓝色调替换成白色,代码如 ...
- 怎么将红底照片用PS换成白底
特别好用,强烈推荐: https://wenku.baidu.com/view/aeb3a306f12d2af90242e653.html
- 图文教程教您蓝底照片更换成白底和红底的方法
有些亲们在网络上交电子照片时,因为有要求,必须交白底的或红底的,但手头上只有蓝底的,如果出去照吧麻烦不说,还得平白无故花银子.何不自己用PS处理成白底和红底的呢?其实方法很简单,一劳永逸,以后再也不会 ...
- python怎么改成白底_教你用OpenCV 和 Python给证件照换底色(蓝底 -红底-白底)...
在我们的生活中常常要用到各种底色要求的证件电子照,红底.蓝底.或者白底,而假如你手上只有一种底色的证件照,你又不想再去拍又不会PS怎么办?今天教你们用OpenCV和Python给你的证件照换底色.P ...
- 职业照--蓝底照片转换为白底
1.职业照–蓝底照片转换为白底 import cv2 import numpy as np img=cv2.imread('C:/Users/Desktop/1.jpg') #原始图片 #缩放 row ...
- python黑屏改成白底_Python实现将蓝底照片转化为白底照片功能完整实例
本文实例讲述了Python实现将蓝底照片转化为白底照片功能.分享给大家供大家参考,具体如下: import cv2 import numpy as np img=cv2.imread('yay.jpg ...
- OpenCv学习笔记(二)--Mat矩阵(图像容器)的创建及CV_8UC1,CV_8UC2等参数详解
(一)Mat矩阵(图像容器)创建时CV_8UC1,CV_8UC2等参数详解 1--Mat不但是一个非常有用的图像容器类,同时也是一个通用的矩阵类 2--创建一个Mat对象的方法很多,我们现在先看一下M ...
- 黑底白字转换成白底黑字
点击图像 点击上面的[图像]. 点击反相 弹出深灰色框,惹吐选薪找到调整,光标右滑,点击[反相]. 操作完成 黑底白字变成白底罪孝歌黑字操作完成.黑底白字怎么变成白底黑字-百度经验黑底白字怎么变成白底 ...
- PS把证件照的蓝底换成其他底色
1.目的:证件照底色的转换 2.需要软件:Photoshop 下载链接:链接 https://pan.baidu.com/s/1wxRjFhuJJgMMgnMQj_VSuA 提取码:wedd 3.操作 ...
- python黑屏改成白底_详解Python给照片换底色(蓝底换红底)
现在网上出现了很多在线换底色的网页版工具是这么做的呢?其实用Python就可以实现. 环境要求 Python3 numpy函数库 opencv库 安装 下载适应版本的numpy函数库,我电脑是WIN1 ...
最新文章
- 图像分析用 OpenCV 与 Skimage,哪一个更好?
- PHP Shell生成工具Weevely
- mysql 导入设置编码_从MySQL导出导入数据库的命令实例及设置会话字符编码
- git、github、gitlab、gitee都是什么?
- 鼠标滑过,解决ul下 li下a的背景与父级Li不同宽的问题
- C++ KMP算法之next数组的生成
- Spring Security第1部分–具有数据库的简单登录应用程序
- SLF4J with Logback in a Maven Project | Mograblog
- git安装 perl ubuntu_ubuntu下安装git
- html面板插件ui,jQuery布局插件UI Layout简介及使用方法
- 现在的手机电池为什么不可拆卸?真相太真实了...
- 右下角出现测试模式 win7 内部版本7601如何去掉
- 弹框插件self(动效兼容到IE9,功能兼容IE6)
- gentry同态加密算法_IBM同态加密技术重大突破,加解密速度可提升75倍
- linux mtd设备使用
- 关于STM32F105/107时钟配置详解
- 第一章 概率论的基本概念 1.6 独立性
- dns联通服务器未响应,DNS解析Bug?网曝辽宁联通用户无法登录工信部投诉平台
- omapl138移植uboot系列之启动TI官方移植的Linux内核(启动内核第一篇)
- 全栈开发之前端开发-欧阳桫-专题视频课程