OpenCV实现照片换底色处理

这篇具有很好参考价值的文章主要介绍了OpenCV实现照片换底色处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.导言

2.引言

3.代码分析

4.优化改进

5.总结


1.导言

在图像处理领域,OpenCV是一款强大而广泛应用的开源库,能够提供丰富的图像处理和计算机视觉功能。本篇博客将介绍如何利用Qt 编辑器调用OpenCV库对照片进行换底色处理,实现更加独特和吸引人的效果

最终的实现效果如下图

OpenCV实现照片换底色处理,opencv,人工智能,计算机视觉

2.引言

OpenCV是一个跨平台的计算机视觉库,其中包含了大量用于图像处理的函数和算法。照片换底色处理是一种常见的图像处理技术,可应用于广告设计、摄影后期处理等领域,为照片增添更多的艺术表现力。本次博客将使用OpenCV库中的函数和方法,在一张照片中将指定颜色范围内的背景替换为自定义的颜色。

3.代码分析

照片换底色处理是一种图像处理技术,通过选择并替换背景颜色,改变照片的整体视觉效果。OpenCV库提供了丰富的函数和方法,可以实现对图像的读取、处理和显示等操作。通过利用OpenCV的颜色转换、颜色范围选择和图像复制等函数,我们可以方便地实现照片换底色处理。

1.首先,需要在程序中引入OpenCV库的头文件,这样才能使用OpenCV的函数和数据结构。先下载好OpenCV然后把OpenCv的头文件包含到pro文件中去 注意要找到include文件地址

然后在x86中bin文件下所以形如 libopencv_*,dll 的文件 包含进去同时复制粘贴到C:\Windows\SysWOW64

OpenCV实现照片换底色处理,opencv,人工智能,计算机视觉

OpenCV实现照片换底色处理,opencv,人工智能,计算机视觉

 添加好库以后头文件也要包含进去(可以在添加OpenCV头文件之前运行一遍,不然电脑可能没有运行找不到库,让电脑反应过来)

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

 2.对图片进行处理

本次使用的代码中,我们首先将输入图像转换为HSV格式,以便更好地处理颜色信息。然后,通过指定颜色范围,创建一个掩膜(mask),将在范围内的像素设置为白色,不在范围内的像素设置为黑色。接下来,通过取反操作,我们可以从原始图像中抠出人像区域。创建一个新的背景图像,并将其设置为自定义的背景颜色。最后,通过将原始图像复制到新的背景图像中,仅保留人像区域,实现照片换底色的效果。

代码实现

    //1.显示一张图片
    Mat image = imread("d:/test.png");
    imshow("1",image);

    //2.图片转hsv格式
    Mat hsv;
    cvtColor(image,hsv,COLOR_BGR2HSV);
    imshow("2",hsv);

    //3.截取颜色区域的范围 inRang   在hsv取值范围内 呈白色  不在范围内 呈黑色
    Mat mask;//模板
    inRange(hsv,Scalar(100,43,46),Scalar(124,255,255),mask);
    imshow("3",mask);//现在的mask 就是可以抠出蓝色的底色

    //4.取反操作  但是我们需要抠出的是人像
    bitwise_not(mask,mask);
    imshow("4",mask);

 对图片进行hsv  ,取色  , 取反 创建新背景效果如下

OpenCV实现照片换底色处理,opencv,人工智能,计算机视觉

Scalar可以选择颜色范围,三元素RGB颜色范围,针对选取的颜色可以参考hsv表

OpenCV实现照片换底色处理,opencv,人工智能,计算机视觉

 3.实现照片换底色,选取红色背景

红色背景RGB选择 为 40,40,200,也可以根据自己需要调整范围

 //5.做一张红色背景图   大小?类型? 参考image原始图片
    Mat redBack = Mat::zeros(image.size(),image.type());
    redBack = Scalar(40,40,200);
    imshow("5",redBack);

    //6.实现图片的拷贝操作
    image.copyTo(redBack,mask);
    imshow("6",redBack);

4.优化改进

对于原始代码,我们可以进行一些优化和改进,以提高代码的可读性和扩展性。例如,可以将换底色处理的功能封装成一个独立的函数,方便重复调用。同时,可以通过参数化的方式,使得函数可以根据不同的需求进行自定义设置。此外,还可以添加错误检查和异常处理机制,提高代码的健壮性和容错性。此外优化后还增加了对图像的保存流程

优化后完整代码

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

void changeBackground(const Mat& inputImage, const Scalar& backgroundColor, const Scalar& lowerBound, const Scalar& upperBound)
{


    // 图片转为hsv格式
    Mat hsv;
    cvtColor(inputImage, hsv, COLOR_BGR2HSV);
    // 在指定范围内的变为白色,不在范围内的变为黑色
    Mat mask;
    inRange(hsv, lowerBound, upperBound, mask);
    imwrite("D:/QtProject/mask1.png", mask);

    // 取反操作,抠出人像
    bitwise_not(mask, mask);


    // 创建新的背景图像
    Mat newBackground = Mat::zeros(inputImage.size(), inputImage.type());
    newBackground = backgroundColor;

    // 将原始图像复制到新背景图像中,只保留前景(人像)区域
    inputImage.copyTo(newBackground, mask);

    imshow("New Background Image", newBackground);


    //保存图片
    imwrite("D:/QtProject/new_background.png", newBackground);


}

int main(int argc, char* argv[])
{
    // 显示一张图片
    Mat image = imread("D:/QtProject/gege.jpg");
    imshow("1",image);
    // 检查图像是否成功加载
    if (image.empty())
    {
        cout << "Failed to load image." << endl;
        return -1;
    }

    // 定义背景颜色、颜色范围
    Scalar backgroundColor(60,60,220);
    Scalar lowerBound(100, 43, 46);
    Scalar upperBound(124, 255, 255);

    // 更换背景
    changeBackground(image, backgroundColor, lowerBound, upperBound);

    // 等待用户按下任意键
    waitKey(0);

    return 0;
}

5.总结

通过本篇博客,我们了解了OpenCV实现照片换底色处理的方法和步骤。OpenCV库提供了丰富的图像处理函数和算法,可以帮助我们实现各种各样的图像处理任务。照片换底色处理是其中的一种,通过选择并替换背景颜色,可以为照片增添独特的艺术效果。希望本篇博客能够对读者理解和应用OpenCV库进行图像处理有所帮助。如果有需要Qt和OpenCV下载的同学可以私聊我,欢迎大家共同进步文章来源地址https://www.toymoban.com/news/detail-594481.html

到了这里,关于OpenCV实现照片换底色处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • photoshop ps 证件照 照片 换底色

    大体步骤,选中头像,抠出来,保存为新图层;将原图层填充为目标颜色,新图层覆盖到原图层上,就实现了修改背景色; 最顶部工具栏,选择-------主体,放在头像上,它会自动识别,识别后,出现虚线,ctrl+j新建图层; 也可以用魔棒工具抠出头像,左侧工具栏,左击不松

    2024年02月11日
    浏览(43)
  • 竞赛保研 基于生成对抗网络的照片上色动态算法设计与实现 - 深度学习 opencv python

    🔥 优质竞赛项目系列,今天要分享的是 🚩 基于生成对抗网络的照片上色动态算法设计与实现 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: http

    2024年01月17日
    浏览(49)
  • Python开源项目之人工智能老照片修复算法学习

    老旧或者破损的照片如何修复呢?本文主要分享一个博主使用后非常不错的照片恢复开源项目:Bringing-Old-Photos-Back-to-Life。 项目的Github地址:项目地址 我们先看看官方给出的效果图: 就算现在看到这张图,我仍然觉着非常惊艳。下面我会把项目环境安装部署,到最后使用的

    2024年02月03日
    浏览(70)
  • 基于生成对抗网络的照片上色动态算法设计与实现 - 深度学习 opencv python 计算机竞赛

    🔥 优质竞赛项目系列,今天要分享的是 🚩 基于生成对抗网络的照片上色动态算法设计与实现 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: http

    2024年02月06日
    浏览(51)
  • 计算机毕设 基于生成对抗网络的照片上色动态算法设计与实现 - 深度学习 opencv python

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月10日
    浏览(48)
  • 互联网加竞赛 基于生成对抗网络的照片上色动态算法设计与实现 - 深度学习 opencv python

    🔥 优质竞赛项目系列,今天要分享的是 🚩 基于生成对抗网络的照片上色动态算法设计与实现 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分 工作量:3分 创新点:4分 🧿 更多资料, 项目分享: http

    2024年02月20日
    浏览(53)
  • 人工智能与自然语言处理:实现和发展

    作者:禅与计算机程序设计艺术 引言 1.1. 背景介绍 随着科学技术的飞速发展,人工智能作为一项新兴技术,得到了广泛的关注和应用。自然语言处理(Natural Language Processing, NLP)作为人工智能领域的重要组成部分,其主要研究目标是让计算机理解和处理自然语言。通过NLP技术

    2024年02月07日
    浏览(65)
  • oneAPI人工智能分析工具包实现图像处理

    oneAPI是一个由英特尔(Intel)主导的、面向异构计算的开放标准和平台。它旨在简化和加速跨多种硬件架构的应用程序开发,包括CPU、GPU、FPGA和其他加速器。 以下是关于oneAPI发展的一些要点: 1.创立背景和目标: oneAPI的发展始于英特尔意识到在异构计算时代,开发者面临的

    2024年02月11日
    浏览(62)
  • 基于Springboot+百度AI人工智能图像图片智能处理系统设计与实现

    基于Springboot+百度AI人工智能图像图片智能处理系统设计与实现  博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,

    2024年02月05日
    浏览(62)
  • opencv C++ 识别照片中的人脸

    //识别照片中的人脸

    2024年02月11日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包