欢迎来到代码驿站!

C代码

当前位置:首页 > 软件编程 > C代码

OpenCV去除绿幕抠图源码

时间:2022-12-12 10:15:14|栏目:C代码|点击:

绿布原图

绿布原图

抠图后的图片

在这里插入图片描述

源码

#include <opencv2/opencv.hpp>
#include <iostream>
#include <vector>
#include <cstdio>
#include <cstring>
using namespace cv;
using namespace std;
int main()
{
    //1、设置需要去除的颜色
    //2、颜色比对
    //3、展示效果
    //只有png有透明度空间,jpg是没有透明度空间的
    Mat srcImg = imread("E:/img/lvbu.jpg", -1);
    cout << srcImg.channels() << endl;
   
    Vec3b color(0, 255, 0); //绿色
    //int tempr = 0;
    int tempc = 0;
    //先把图片放大,做完抠图后再缩小。
    Mat temp;
    //转换图片,增加透明区域
    cvtColor(srcImg, temp, COLOR_RGB2BGRA);
    for (int i = 0; i < srcImg.rows; ++i) {
        for (int j = 0; j < srcImg.cols; ++j) {
            Vec3b &pixel = srcImg.at<Vec3b>(i, j);
            Vec4b &pixel_temp = temp.at<Vec4b>(i, j);
            if (pixel[0] <= 30 && pixel[1] >= 210 && pixel[2] <= 30) {
                tempc = j + 1; //把符合要求的下一个点也抠掉
                pixel_temp[3] = 0;
                //pixel[0] = 255;
                //pixel[1] = 255;
                //pixel[2] = 255;
            }
            else if (tempc == j - 1) {
                pixel_temp[3] = 0;
                /*pixel[0] = 255;
                pixel[1] = 255;
                pixel[2] = 255;*/
            }
        }     
    }
    imshow("result", temp);
    imwrite("E:/img/result.png", temp);
    waitKey(0);
    return 0;
}

上一篇:C++ OpenCV实现像素画的示例代码

栏    目:C代码

下一篇:Matlab 数字图像的滤波及边缘检测

本文标题:OpenCV去除绿幕抠图源码

本文地址:http://www.codeinn.net/misctech/221161.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有