目录

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:WindowsSysWOW64

OpenCV完成相片换底色处理
OpenCV实现照片换底色处理​修改

OpenCV完成相片换底色处理
OpenCV实现照片换底色处理​修改

增加好库今后头文件也要包括进去(能够在增加OpenCV头文件之前运行一遍,不然电脑或许没有运行找不到库,让电脑反应过来)

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;

OpenCV实现照片换底色处理

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);

OpenCV实现照片换底色处理

对图片进行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);

OpenCV实现照片换底色处理

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;
}

OpenCV实现照片换底色处理

5.总结

经过本篇博客,咱们了解了OpenCV完成相片换底色处理的办法和步骤。OpenCV库供给了丰厚的图画处理函数和算法,能够协助咱们完成各式各样的图画处理使命。相片换底色处理是其中的一种,经过挑选并替换布景色彩,能够为相片增添共同的艺术效果。期望本篇博客能够对读者了解和应用OpenCV库进行图画处理有所协助。如果有需求Qt和OpenCV下载的同学能够私聊我,欢迎大家共同进步