###实验用证件照为网图,如有侵犯联系我立删###

(0)导入OpenCV:

#include <opencv2/opencv.hpp>

using namespace cv;

(1) 显示一张图片:(RGB)

    Mat img = imread("d:/6.png");//Mat 图片类型 容器对象类型-----这里是声明img为图片

    imshow ("title",img);//显示一张图片(title为显示的图片的标题)
    
    waitKey(0);//等待用户按下任意键

eg.

 (2)图像模糊处理(仅了解):

    Mat blurImg;//模糊图片对象

    blur(img,blurImg,Size(50,50)); //模糊处理函数,Size(横向模糊尺寸,纵向模糊尺寸)

    imshow("blur",blurImg);

eg.

(3) 图像灰度处理:(GRAY)

    Mat grayImg;//声明灰色图片对象

    cvtColor(img,grayImg,COLOR_BGR2GRAY);//颜色处理函数

    imshow("gray",grayImg);

eg.

(4) 图像二值化处理:(BINARY)

    Mat threImg;//二值图片对象

    threshold(grayImg,threImg,108,255,THRESH_BINARY);//令区间内值为1
    //二值化处理函数,threshold(来源,对象,左区间,右区间,函数名)
    
    imshow("binary",threImg);

eg. 

        这里我们不难发现,在人像和背景的交接处切割效果并不理想,这是因为RGB对光照敏感:同一物体在不同光照下RGB值变化很大

        为了解决这个问题,改用HSV(Hue-Saturation-Value),它是一种比RGB更直观的颜色空间,它将颜色信息分解为:

  • H(色相):颜色类型(0-180°,OpenCV中为0-180)

  • S(饱和度):颜色鲜艳程度(0-255)

  • V(明度):颜色亮度(0-255)

        HSV分离了颜色和亮度:可以通过H通道直接提取特定颜色范围(比如"红色"或"蓝色"),不受明暗影响。

(5)HSV处理:

    Mat hsv;

    cvtColor(image,hsv,COLOR_BGR2HSV);

    imshow("2",hsv);

 eg.

 (6)截取蓝色空间范围:

    //HSV范围之内呈白色模板 --Hue(色调)Saturation(饱和度)Value(亮度)
    Mat mask;

    //(源,色min,色的max,对象)
    inRange(hsv,Scalar(100,43,46),Scalar(124,255,255),mask);

    imshow("3",mask);

 eg.

 (7)取反操作:

    bitwise_not(mask,mask);

    imshow("4",mask);

eg.

(8).生成红色背景 

    // :: C++作用域分解运算符     zeros() 创建制定几行几列的矩阵 像素为0
    Mat redBack = Mat::zeros(image.size(),image.type());

    redBack = Scalar(40,40,200);//---Scalar(B,G,R)

    imshow("5",redBack);

eg.

(9)拷贝:

    image.copyTo(redBack,mask);//将mask操作到redBack上

    imshow("6",redBack);

 eg.

ps.选用实验用相片时要注意人物衣服的颜色和背景色不能太接近(一个色调),否则会导致实验效果不理想。这里附上原图便于读者复现:

常见颜色HSV范围(OpenCV):

颜色 下限 (Scalar) 上限 (Scalar) 备注
红色 (0, 43, 46) (10, 255, 255) 注意红色在色环两端
(170, 43, 46) (180, 255, 255) 需要合并两个范围
橙色 (11, 43, 46) (25, 255, 255)
黄色 (26, 43, 46) (34, 255, 255)
绿色 (35, 43, 46) (77, 255, 255)
青色 (78, 43, 46) (99, 255, 255)
蓝色 (100, 43, 46) (124, 255, 255)
紫色 (125, 43, 46) (155, 255, 255)
粉红色 (156, 43, 46) (169, 255, 255)
白色 (0, 0, 221) (180, 30, 255) 低饱和度+高明度
黑色 (0, 0, 0) (180, 255, 46) 低明度
灰色 (0, 0, 46) (180, 43, 220) 中低饱和度+中明度

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐