这篇文章主要介绍了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抠图内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
沃梦达教程
本文标题为:OpenCV去除绿幕抠图源码


猜你喜欢
- C语言详解float类型在内存中的存储方式 2023-03-27
- C++ 数据结构超详细讲解顺序表 2023-03-25
- ubuntu下C/C++获取剩余内存 2023-09-18
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- Qt计时器使用方法详解 2023-05-30
- C语言qsort()函数的使用方法详解 2023-04-26
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- Easyx实现扫雷游戏 2023-02-06