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

做网站制作的公司平面设计接单赚钱平台

做网站制作的公司,平面设计接单赚钱平台,网站开发会什么软件,杭州商城app开发文章目录 总体步骤1.RGB转HSV2.找出要换的底色3.取反#xff0c;黑白颠倒4.将原图像的非背景部分复制到新背景上 完整代码1.C纯手写版2.官方API版本 总体步骤 1.RGB转HSV 为什么一定要转为HSV 颜色空间#xff1f; 将图像从BGR颜色空间转换为HSV颜色空间是因为HSV颜色空间更… 文章目录 总体步骤1.RGB转HSV2.找出要换的底色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范围取色表 例如在H35 -77 S43-255 V46-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.atVec3b(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.atuchar(y, x) 255;}}} }这里涉及到一个新概念 掩码图像 掩码mask在计算机视觉和图像处理领域中是一种用于选择、过滤或操作图像中特定部分的工具。掩码本质上是一张与原图像大小相同的二值图像其中每个像素要么是0要么是1在OpenCV中通常用0和255来表示。掩码图像中值为1或255的部分表示感兴趣的区域ROIRegion of Interest而值为0的部分则表示不感兴趣的区域。 掩码的具体作用可以包括以下几种 区域选择 通过掩码可以选择图像中的某个特定区域进行操作而忽略其他部分。例如只对图像中的某个颜色范围进行处理。 图像分割 掩码可以用于将图像分割成前景和背景。前景是感兴趣的部分背景则是其他部分。 图像修复 掩码可以用于图像修复指定需要修复的区域。 遮罩操作 在图像合成时掩码可以用作遮罩控制哪些部分需要叠加或混合。 上述代码通过遍历可以找到蓝色底色的区域并置为白色。其余的全部设置为黑色。 代码运行效果中间的白点因为胖虎穿的偏蓝色领带因此过滤出了一部分 此时基本上已经找出原来底色的区域已经全部置成了白色。 3.取反黑白颠倒 主要目的是找到除了背景色的其他元素这一步是选择 非背景色的元素 置为白色因为除了背景色其他像素均要移到新的背景色上去 非背景色成为了ROI感兴趣区域背景色置为黑色代表不再关注原来的背景色。遍历每个像素用255减去原来的像素便可反转颜色黑白颠倒。 // bitwise_not(mask,mask);for (int y 0; y mask.rows; y) {for (int x 0; x mask.cols; x) {//对每个像素进行取反mask.atuchar(y, x) 255 - mask.atuchar(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.atuchar(y, x) ! 0) {dst.atVec3b(y, x) src.atVec3b(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.atuchar(y, x) ! 0) {dst.atVec3b(y, x) src.atVec3b(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.atVec3b(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.atuchar(y, x) 255;}}} }void inRange_dmeo(Mat image){Mat hsv;//先将图片转为HSVcvtColor(image,hsv,COLOR_BGR2HSV);// 提取左上角像素的HSV值 ,也就是对应底色的值 有利于更好控制提取Vec3b hsvValue hsv.atVec3b(0, 0);couthsvValueendl;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.atuchar(y, x) 255 - mask.atuchar(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.atVec3b(0, 0);couthsvValueendl;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.w-s-a.com/news/392039/

相关文章:

  • 公司网站友情链接怎么做副链华为荣耀手机官网
  • 一条龙做网站旅游网页设计模板图凡科
  • 中山网站建设哪家便宜在中国做外国网站怎么收钱
  • 网站优化大计孝感注册公司
  • 设计接单app平台有哪些在线网站seo诊断
  • 兰州网站建设推广现代营销手段有哪些
  • 郴州网站seo优化网络安全哪个培训班比较好
  • 做网站需要记哪些代码企业网站建设思路
  • 重庆自助建站模板网络服务器配置与管理
  • 外贸网站怎样做小程序买量平台
  • 中山精品网站建设机构海外留学网站建设方案
  • 长春网站建设工作如何取消wordpress页脚
  • 忻府网站建设排名网络管理系统官网
  • 张家港外贸网站建设国医堂网站平台建设
  • 水冶那里有做网站的对于网站链接优化有哪些建议
  • 宝安中心地铁站是几号线化妆品网站做的好的
  • 海宁营销型网站设计企业融资是什么意思
  • 淘宝客做网站要钱吗网站开发试题库
  • 10g空间网站做视频网站网站建设找超速云
  • 一元购网站怎么做企业网站源码cms
  • 域名不变 网站改版临沂企业网站建站模板
  • 天河网站建设信科网络外包公司和公司直招哪个好
  • 网站制作哈尔滨聊天系统源码
  • 网站建设朋友圈素材青白江建设网站
  • 红酒网站设计软件设计文档
  • 如何创建网站目录网站申请支付宝接口
  • 网站做区块链然后往里面投钱品牌设计公司收费标准
  • 2022互联网+创新创业项目呼和浩特企业网站排名优化
  • 电子商务类网站建设山西自助建站系统怎么用
  • odoo做网站网站设置专栏有什么好处