玩opencv时候,肯定会接触色彩空间。最常用的是RGB色彩空间,用0~255表示每个通道。

摄影投效里有个技术,叫做蓝幕,也有绿幕。后期把蓝色区域扣掉,然后换成别的背景。

在上图中,细心的小伙伴会发现,实际这个蓝色并不一定是纯蓝(0,0,255)

有脑洞大的小朋友想到了一个方法,只提取蓝色通道,然后把值接近255的都扣掉。

但是有个问题,这样会扣到高光区域(RGB三个值都很高的区域)

另外,如果这个蓝色偏亮偏暗或偏绿,或者摄像机有偏色,用(0,0,255)这个参数当特征来匹配是很困难的事。

这儿我给大家推荐一个好用的色彩空间,叫HSV色彩空间。

H是个色相参数,用0到360度表示了颜色。

S是个色彩鲜艳度的参数,越大颜色越鲜艳,越小颜色越灰。S有个通俗的名字,叫饱和度。

V是个亮度参数,越小越黑

RGB到HSV色彩空间的转换代码如下:

float rgb2h(int B, int G, int R)

{

float H;

int max = max(max(R, G), B);

int min = min(min(R, G), B);

if (R == max)

H = (G - B)*60.0 / (max - min);

if (G == max)

H = 120+(B - R)*60.0 / (max - min);

if (B == max)

H = 240+(R - G)*60.0 / (max - min);

if (H < 0)H = H + 360;

return H;

}

我们先找一张色彩分布的图来试验一下抠图

蓝色附近的区域就是H在240度附近。下面我们写个小程序把240度正负50度的区域抠掉。

void mytest()

{

Mat frame_t = imread("a3.jpg", CV_LOAD_IMAGE_UNCHANGED);

int WW, HH;//图像宽度和高度 单位:像素

HH = frame_t.rows;WW = frame_t.cols;int row2, col2;//循环时候计数第几行和第几列的

for (row2 = 0; row2 < HH; row2++)

{

for (col2 = 0; col2 < WW; col2++)

{

if (fabsf(rgb2h(frame_t.at(row2, col2)[0], frame_t.at(row2, col2)[1], frame_t.at(row2, col2)[2]) - cut)<5)

{

frame_t.at(row2, col2)[0] = 0;

frame_t.at(row2, col2)[1] = 0;

frame_t.at(row2, col2)[2] = 0;

}

}

}

imshow("hsvcut", frame_t);

}

运行效果如图

在上图中,我们发现这个算法可以准确地扣出蓝色区域,而且即使蓝色亮一点暗一点或是灰一点鲜艳一点,也没有影响。

接下来,我们找两个图片来抠图和合成图像。

首先是蓝幕原图

然后是背景

我们来写一下抠除蓝色部分以后与背景叠加的代码

Mat frame_orig;//采集的原始图像

frame_orig = imread("my2.jpg", CV_LOAD_IMAGE_UNCHANGED);

Mat frame_back;//采集的原始图像

frame_back = imread("my1.jpg", CV_LOAD_IMAGE_UNCHANGED);

imshow("orig", frame_orig);

imshow("back", frame_back);

Mat frame_c;//测试图像

frame_c = frame_orig;

int W, H;//图像宽度和高度 单位:像素

H = frame_orig.rows;

W = frame_orig.cols;

int row, col;//循环时候计数第几行和第几列的

for (row = 0; row < H; row++)

{

for (col = 0; col < W; col++)

{

if (fabsf(rgb2h(frame_orig.at(row, col)[0], frame_orig.at(row, col)[1], frame_orig.at(row, col)[2])-cut)

{

frame_c.at(row, col)[0] = frame_back.at(row, col)[0];

frame_c.at(row, col)[1] = frame_back.at(row, col)[1];

frame_c.at(row, col)[2] = frame_back.at(row, col)[2];

}

}

}

imshow("MyPic", frame_c);

合成以后的图像见下图右下。

接下来,我们再换个图片做一次。为了让图片增加些戏剧效果,我找来了一个热气球的蓝幕原图和一段树枝的背景。

蓝幕原图

背景

最后合成的图像见下图右上。

这种基于OpenCV的蓝幕抠图算法可以自动地对每一帧图像进行处理和合成,特别适合用于视频的实时抠图,也许可以用在自动换背景等应用上。

opencv 图像 抠图 算法_摄影领域的OpenCV教程之“蓝幕抠图”相关推荐

  1. opencv 图像 抠图 算法_图像抠图算法学习 - Shared Sampling for Real-Time Alpha Matting

    一.序言 陆陆续续的如果累计起来,我估计至少有二十来位左右的朋友加我QQ,向我咨询有关抠图方面的算法,可惜的是,我对这方面之前一直是没有研究过的.除了利用和Photoshop中的魔棒一样的技术或者Ph ...

  2. opencv 图像 抠图 算法_人工智能 | 不用绿幕也能实时抠图,商汤等提出只需单张图像、单个模型的新方法MODNet...

    openEA开源周刊 openEA开源社区的官方运营载体 这里每天给大家呈现有价值的开源资讯,欢迎您的来稿与推荐,点击上方蓝色字,加入我们吧! 摘要:近日,香港城市大学和商汤提出一种新型人像抠图方法 ...

  3. python opencv图像二值化函数_python opencv 二值化 计算白色像素点的实例

    python opencv 二值化 计算白色像素点的实例 贴部分代码 #! /usr/bin/env python # -*- coding: utf-8 -*- import cv2 import ...

  4. 3D智能抠图算法新思路:实现复杂背景下的通用抠图

    1. 背景 随着视频功能的广泛使用,直播带货和视频会议产业蓬勃发展.抠图作为一项将目标物体和背景分离的技术,被广泛应用于直播带货和视频会议领域.比如,在直播带货时,通过将背景渲染成华丽的直播间来吸引粉 ...

  5. 计算机视觉 | 2.颜色阈值蓝幕替换(cv2掩膜的设置,图像堆叠,蓝幕抠图)

    前言 把图像转为灰度图像的像素网格以及 x 和 y 的函数来处理以后,我们还需要学会如何利用这些信息,例如如何用图像信息来分离特定区域. 计算机图形和视频广泛应用了颜色阈值这门技术,比如蓝幕.使用蓝幕 ...

  6. opencv 图像 抠图 算法_我讨厌这个绿油油的头像!我用opencv换一下背景

    更多精彩在[Opencv视觉实践] 大家好呀!大家不用疑惑啥时候关注了一个叫[Opencv视觉实践]的公众号呢?因为[行走的机械人]改名字了.本号想专注分享计算机视觉相关的有趣东西,虽然[行走的机械人 ...

  7. opencv 图像 抠图 算法_人人可用的在线抠图,AI自动化的那种!北大校友算法玩出新高度...

    杨净 发自 凹非寺 量子位 报道 | 公众号 QbitAI 现在人人可试可玩的图像分割来了. 在线API,只需输入图片网址,即可自动删除目标背景. 就拿今天凌晨刚夺得欧冠冠军的拜仁来试试手- 然后就变 ...

  8. opencv 图像雾检测_雾的检测算法

    雾的检测算法相对来说文献不是很多,这次和大家介绍两篇相对来说比较容易实现的两篇文章,其中一篇是基于灰度直方图的方式进行分析检测,另一篇是将rgb图像空间转化为hsv空间进行分析检测. 1.灰度图检测 ...

  9. opencv图像清晰度计算_收藏|分析君带你认识Python中的十大图像处理工具

    当今世界充满了各种数据,而图像是其中高的重要组成部分.然而,若想其有所应用,我们需要对这些图像进行处理.图像处理是分析和操纵数字图像的过程,旨在提高其质量或从中提取一些信息,然后将其用于某些方面. 图 ...

最新文章

  1. 【ACM】杭电OJ 2149
  2. 一行 Python 实现并行化 -- 日常多线程操作的新思路 - 左手键盘,右手书 - SegmentFault...
  3. LibTorch NMS
  4. LeetCode Intersection of Two Arrays
  5. 读书笔记《单核工作法》:2
  6. PHP函数——urlencode() 函数
  7. 走近Flex组件系列(三):按扭组件(Button,CheckBox,LinkBar,LinkButton,PopUpButton,RadioButton,ToggleButtonBar)...
  8. leetcode242. 有效的字母异位词(两种方法map或数组)
  9. 计算机进去pe怎么设置用户,电脑密码怎么设置,教您设置电脑开机密码
  10. idea常用快捷方式
  11. 是否有任何python库可以从自然语言中解析日期和时间?
  12. 缓存MEMCACHE 使用原子性操作add,实现并发锁
  13. vue 一个页面多个router-view如何配置子路由_浅谈vue前端开发架构
  14. 阿里云李飞飞领衔撰写,云原生数据库教材
  15. 计算机相关国外期刊,计算机 国外期刊
  16. vb局域网连接mysql_VB 用代码进行局域网内数据库的连接
  17. 变量之间的相关性度量
  18. canvas机器鸭子走路动画
  19. 模块化-CMJESM
  20. python+gurobi

热门文章

  1. 【爬虫 | Python】解决‘Requests Max Retries Exceeded With Url‘报错的问题
  2. 最受欢迎的 Linux 怎么是它,Ubuntu 排第六
  3. 文件夹加密超级大师V16.85官方版
  4. SAP PO开票计划
  5. 招聘android工程师
  6. 400 名微软员工曝光薪资:4 万美元到 32 万美元不等!
  7. 怎样提高英文论文写作水平[转载]
  8. 【网络文摘】一家公司要了你后,凭什么给你开高工资?
  9. 问题 A: Least Common Multiple
  10. 4星|《经济学人2017精选书评合辑》:书都比较新且没有中译本