OpenCV去除綠幕摳圖源碼

綠佈原圖

綠佈原圖

摳圖後的圖片

在這裡插入圖片描述

源碼

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

到此這篇關於OpenCV去除綠幕 摳圖的文章就介紹到這瞭,更多相關OpenCV摳圖內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: