当前位置: 首页 > news >正文

深圳做营销网站公司简介舆情网站

深圳做营销网站公司简介,舆情网站,域名注册网站搭建,做的网站怎么测试工具文章目录 总体步骤1.RGB转HSV2.找出要换的底色3.取反,黑白颠倒4.将原图像的非背景部分复制到新背景上 完整代码1.C纯手写版2.官方API版本 总体步骤 1.RGB转HSV 为什么一定要转为HSV 颜色空间? 将图像从BGR颜色空间转换为HSV颜色空间是因为HSV颜色空间更…

文章目录

    • 总体步骤
      • 1.RGB转HSV
      • 2.找出要换的底色
      • 3.取反,黑白颠倒
      • 4.将原图像的非背景部分复制到新背景上
    • 完整代码
      • 1.C++纯手写版
      • 2.官方API版本

总体步骤

在这里插入图片描述

1.RGB转HSV

为什么一定要转为HSV 颜色空间?

将图像从BGR颜色空间转换为HSV颜色空间是因为HSV颜色空间更适合进行颜色分割和提取操作。这是因为HSV颜色空间将颜色表示为色相(Hue)、饱和度(Saturation)和明度(Value),这使得颜色的分离更加直观和有效。具体原因如下:

色相(Hue)分离

  • 在HSV颜色空间中,色相(H)直接表示颜色的种类,例如红色、绿色、蓝色等。通过指定色相范围,可以非常容易地分离出特定的颜色。例如,**绿色的色相范围通常集中在一个较小的区间内,这使得提取绿色对象变得简单而精确。**这也是为什么特效制作的时候需要使用绿色幕布,更加方便提取图像。

饱和度(Saturation)和明度(Value)独立

  • 饱和度表示颜色的纯度,明度表示颜色的亮度。在BGR颜色空间中,这些属性是混合在一起的,不容易分离。但是在HSV颜色空间中,饱和度和明度是独立的,可以单独进行调节和阈值化,从而实现更好的颜色分割效果。

处理光照变化

  • HSV颜色空间对于光照变化更为鲁棒。由于明度和饱和度是独立的,即使在光照发生变化时,色相也相对稳定,使得颜色分割在不同光照条件下表现更好。

HSV范围取色表

在这里插入图片描述

例如在H:35 -77 S:43-255 V:46-255 之间的可以认为是绿色。 有了这张图参考,我们能够更容易地过滤掉某种颜色。

2.找出要换的底色

以将一张蓝底的证件照换成红底证件照为例:

在这里插入图片描述

转为HSV颜色空间之后,我们要找出蓝色的底色所在区域。可以通过遍历像素的方式实现

// 根据范围创建 掩码图像 二值化图像
void customInRange(const Mat& src, Scalar lowerBound, Scalar upperBound, Mat& dst) {// 创建与源图像大小相同的掩码图像dst = Mat::zeros(src.size(), CV_8UC1);// 遍历图像的每个像素for (int y = 0; y < src.rows; y++) {for (int x = 0; x < src.cols; x++) {Vec3b pixel = src.at<Vec3b>(y, x);bool inRange = true;// 检查像素值是否在指定范围内 通过HSV范围表来指定for (int c = 0; c < 3; c++) {if (pixel[c] < lowerBound[c] || pixel[c] > upperBound[c]) {inRange = false;break;}}// 如果在范围内,设置掩码图像中的对应位置为255if (inRange) {dst.at<uchar>(y, x) = 255;}}}
}

这里涉及到一个新概念 掩码图像

掩码(mask)在计算机视觉和图像处理领域中,是一种用于选择、过滤或操作图像中特定部分的工具。掩码本质上是一张与原图像大小相同的二值图像,其中每个像素要么是0,要么是1(在OpenCV中通常用0和255来表示)。掩码图像中值为1(或255)的部分表示感兴趣的区域(ROI,Region of Interest),而值为0的部分则表示不感兴趣的区域。

掩码的具体作用可以包括以下几种:

  1. 区域选择
    • 通过掩码,可以选择图像中的某个特定区域进行操作,而忽略其他部分。例如,只对图像中的某个颜色范围进行处理。
  2. 图像分割
    • 掩码可以用于将图像分割成前景和背景。前景是感兴趣的部分,背景则是其他部分。
  3. 图像修复
    • 掩码可以用于图像修复,指定需要修复的区域。
  4. 遮罩操作
    • 在图像合成时,掩码可以用作遮罩,控制哪些部分需要叠加或混合。

上述代码通过遍历可以找到蓝色底色的区域,并置为白色。其余的全部设置为黑色。

代码运行效果:(中间的白点,因为胖虎穿的偏蓝色领带,因此过滤出了一部分)

在这里插入图片描述

此时,基本上已经找出原来底色的区域,已经全部置成了白色。

3.取反,黑白颠倒

主要目的是找到除了背景色的其他元素,这一步是选择 非背景色的元素 置为白色,因为除了背景色,其他像素均要移到新的背景色上去, 非背景色成为了ROI(感兴趣区域),背景色置为黑色,代表不再关注原来的背景色。遍历每个像素,用255减去原来的像素便可反转颜色,黑白颠倒。

//    bitwise_not(mask,mask);for (int y = 0; y < mask.rows; ++y) {for (int x = 0; x < mask.cols; ++x) {//对每个像素进行取反mask.at<uchar>(y, x) = 255 - mask.at<uchar>(y, x);}}

效果如图:

在这里插入图片描述

4.将原图像的非背景部分复制到新背景上

//将非背景色像素移到事先准备好的背景上
void customCopyTo(const Mat& src, Mat& dst, const Mat& mask) {// 确保源图像和掩码图像的大小一致if (src.size() != dst.size() || src.size() != mask.size()) {throw std::invalid_argument("Size of src, dst, and mask must be the same");}// 遍历图像的每个像素for (int y = 0; y < src.rows; y++) {for (int x = 0; x < src.cols; x++) {// 如果掩码中的值为非零(通常是255),则复制源图像的像素到目标图if (mask.at<uchar>(y, x) != 0) {dst.at<Vec3b>(y, x) = src.at<Vec3b>(y, x);}}}
}

遍历像素,与掩码图像对比,如果不是黑色,说明是ROI区域,将像素替换到准备好的纯色背景上面。就完成了背景换色

效果如下:

在这里插入图片描述

完整代码

1.C++纯手写版

//将非背景色像素移到事先准备好的背景上
void customCopyTo(const Mat& src, Mat& dst, const Mat& mask) {// 确保源图像和掩码图像的大小一致if (src.size() != dst.size() || src.size() != mask.size()) {throw std::invalid_argument("Size of src, dst, and mask must be the same");}// 遍历图像的每个像素for (int y = 0; y < src.rows; y++) {for (int x = 0; x < src.cols; x++) {// 如果掩码中的值为非零(通常是255),则复制源图像的像素到目标图像if (mask.at<uchar>(y, x) != 0) {dst.at<Vec3b>(y, x) = src.at<Vec3b>(y, x);}}}
}
// 根据范围创建 掩码图像 二值化图像
void customInRange(const Mat& src, Scalar lowerBound, Scalar upperBound, Mat& dst) {// 创建与源图像大小相同的掩码图像dst = Mat::zeros(src.size(), CV_8UC1);// 遍历图像的每个像素for (int y = 0; y < src.rows; y++) {for (int x = 0; x < src.cols; x++) {Vec3b pixel = src.at<Vec3b>(y, x);bool inRange = true;// 检查像素值是否在指定范围内for (int c = 0; c < 3; c++) {if (pixel[c] < lowerBound[c] || pixel[c] > upperBound[c]) {inRange = false;break;}}// 如果在范围内,设置掩码图像中的对应位置为255if (inRange) {dst.at<uchar>(y, x) = 255;}}}
}void inRange_dmeo(Mat &image){Mat hsv;//先将图片转为HSVcvtColor(image,hsv,COLOR_BGR2HSV);// 提取左上角像素的HSV值 ,也就是对应底色的值 有利于更好控制提取Vec3b hsvValue = hsv.at<Vec3b>(0, 0);cout<<hsvValue<<endl;Mat mask;//设置 下限 和上限根据设定的HSV颜色范围  生成一个二值化的掩码(mask),掩码中白色部分表示图像中符合设定颜色范围的部分,黑色部分表示不符合的部分。customInRange(hsv,Scalar(100,43,46),Scalar(115,225,227),mask);imshow("mask",mask);//准备好一个背景颜色 以红色为例Mat red_background = Mat::zeros(image.size(),image.type());red_background = Scalar (40,40,200);//对掩码取反, 黑白颠倒,选择除了背景色的区域 ,也就是欲复制的区域
//    bitwise_not(mask,mask);for (int y = 0; y < mask.rows; ++y) {for (int x = 0; x < mask.cols; ++x) {//对每个像素进行取反mask.at<uchar>(y, x) = 255 - mask.at<uchar>(y, x);}}imshow("bitwise_not mask",mask);//使用掩码(mask)将输入图像中符合条件的部分复制到红色背景图像上customCopyTo(image,red_background,mask);imshow("roi",red_background);
}

2.官方API版本

OpenCV提供了生成掩码,掩码取反,复制非背景色元素到新背景的API 如下,

inRange 根据HSV范围 生成掩码

bitwise_not 掩码取反

copyTo 根据掩码复制到新背景色

void inRange_dmeo(Mat &image){Mat hsv;//先将图片转为HSVcvtColor(image,hsv,COLOR_BGR2HSV);// 提取左上角像素的HSV值 ,也就是对应底色的值 有利于更好控制提取Vec3b hsvValue = hsv.at<Vec3b>(0, 0);cout<<hsvValue<<endl;Mat mask;//设置 下限 和上限根据设定的HSV颜色范围  生成一个二值化的掩码(mask),掩码中白色部分表示图像中符合设定颜色范围的部分,黑色部分表示不符合的部分。inRange(hsv,Scalar(100,43,46),Scalar(115,225,227),mask);imshow("mask",mask);//准备好一个背景颜色 以红色为例Mat red_background = Mat::zeros(image.size(),image.type());red_background = Scalar (40,40,200);//对掩码取反, 黑白颠倒,选择除了背景色的区域 ,也就是欲复制的区域bitwise_not(mask,mask);imshow("bitwise_not mask",mask);//使用掩码(mask)将输入图像中符合条件的部分复制到红色背景图像上image.copyTo(red_background,mask);imshow("roi",red_background);
}
http://www.wangmingla.cn/news/57625.html

相关文章:

  • 前端网站开发兼职seo博客教程
  • 做公司网站哪家 上海seo就是搜索引擎广告
  • 网站开发是什么语言抖音seo公司
  • 山东东营考试信息网官网网站优化包括哪些内容
  • 深圳网站建设公司报价单大数据是干什么的
  • 周口城乡建设网站网站关键词优化费用
  • 网站怎样做排名靠前上海谷歌seo公司
  • 网站商城是用什么框架做的成人编程培训机构排名前十
  • 模板网站建设青岛软文营销是什么
  • 南昌网站建设价位百度后台登录
  • 找客源用哪个软件好代做seo关键词排名
  • 简易网站在线客服系统企业seo推广
  • 做网站用哪种代码比较好推广郑州疫情最新情况
  • 做家教网站赚钱么河南新站关键词排名优化外包
  • 廊坊关键词排名软件seo效果最好的是
  • 网站建设一般涉及后台功能引流客户的最快方法是什么
  • 哪个网站的课件做的好处seo培训机构哪家好
  • 电脑iis做网站中国新闻
  • 佛山顺德网站建设东莞疫情最新通知
  • 帮人网站开发维护违法网络营销工具有哪些?
  • 网站企业备案和个人备案的区别怎么在网上做网络营销
  • 怎么做点击图片进入网站百度指数人群画像哪里查询
  • 男女做暖网站是什么样子的营销新闻
  • flash网站的制作搜索引擎 磁力吧
  • 司法鉴定网站建设的内容seo搜索引擎优化试题及答案
  • 武汉做网站seo2022最新版百度
  • vi手册模板免费百度搜索引擎优化案例
  • 苏州十大软件公司六六seo基础运营第三讲
  • wordpress手机适应赤峰seo
  • 青岛公司建设网站seo排名软件免费