基于RGB颜色空间使用OpenCV-Python实现照片换底

【opencv+python】图像处理之一、颜色空间RGB,Gray与HSV 该系列文章为 OpenCV+Python Tutorials的学习笔记 代码托管在Github 转载请注明: http://blog.youkuaiyun.com/a352611 [三记的博客]颜色空间转换cv2.cvtColorRGB就是指Red,Green和Blue,一副图像由这三个通道(channel)构成 Gray就是只有灰度值 HSV就是Hue(色调),Saturation(饱和度)和Valu 阅读详情
☞ ░ 前往老猿Python博文目录 https://blog.youkuaiyun.com/LaoYuanPython ░

一、引言

前一阵子家人报考教师资格证考试,因报名需要将蓝底的数字相片换成白底的,老猿虽然在学习图像处理相关开发技术,但并没有熟练使用的图像编辑软件,一般也就是用个windows的画图工具简单处理一下,因此这个事情就只好求助于OpenCV的图像处理技术。不过老猿OpenCV图像处理也就学了最低级的图像处理,其他的还没学完,也就会图像空间变换、腐蚀和膨胀处理、阈值处理、几何变换、四则运算、鼠标键盘事件等。具体请参考《OpenCV-Python图形图像处理》。

二、处理思路

2.1、初步思路

老猿试图用学过的图像处理基础知识能完成数字图像的处理,大致构思如下:

  1. 先将图像分离为R、G、B三通道的三个图像,蓝底应该是R、G分量小B分量较大的部分,分别对这三部分进行阈值处理(R、G分量小于某个值,B分量要求大于某个值),满足这样条件的我们就认为该像素对应区域为背景色区域,阈值处理后可以得到背景的掩膜图像A以及其反转后对应前景色的掩膜图像F;
  2. 将原照片自身与自身相乘,相乘时设置其掩膜为掩膜图像F,得到照片前景;
  3. 构造一与照片大小相同的纯白色(新底色)图像,将其自身与自身相乘,相乘时设置其掩膜为掩膜图像A,得到对应的新底色背景;
  4. 将新得到的照片前景和新底色背景相加或相或得到新底色的照片。
2.3、实际处理遇到的问题及应对

实际处理时,发现远比这个复杂,有2个问题:

  • 照片的背景色不是单一的像素值,而是不同位置会有不同,特别是前景色周边的灰度值与其他部分差异较大;
  • 背景色的灰度值与前景色的灰度值不是简单的大于等于或小于等于关系,而是部分前景色小于背景色灰度值,部分前景色灰度值大于背景色灰度值,甚至有部分灰度值前景色和背景色是相同的。

在这个时候就需要根据实际相片底色情况调整RGB三个分量阈值处理的阈值,需要能对未能有效识别为背景区域的背景区域方便获取对应像素值。同时为了解决边界问题,可能需要进行背景色的膨胀处理。

2.4、代码实现

按照以上处理思路和问题应对方式,老猿实现了一个图像鼠标点击获取像素值输出的函数和一个图像背景色替换的函数,代码如下:

import cv2
import numpy as np
from opencvPublic import readImgFile #类似imread的图片文件装载函数,支持识别中文文件名

def OnMouseEvent( event, x, y, flags,img):#图片点击时输出对应位置和像素值
    #鼠标左键按下打印对应位置的图像的像素值
    if event==cv2.EVENT_LBUTTONDOWN:
        print(f'{(x,y)}:{img[y][x]}')

def changePhotoBG(fileName,BGRThresh,MorphOpCount=0):
    photo = readImgFile(fileName)  #读入图像
    BThresh,GThresh,RThresh = BGRThresh
    bgWhite = np.full(photo.shape[:],255,dtype=np.uint8) #构造一个与图像大小完全相同的全白图像

    #分离读入图像的rgb分量,并对每个分量进行阈值处理,确认每个分量的阈值是最关键的一步,与具体图像背景紧密相关,根据背景调整相关阈值
    b,g,r = cv2.split(photo)
    ret, maskb = cv2.threshold(b, BThresh, 255, cv2.THRESH_BINARY)  
    ret,maskg  = cv2.threshold(g, GThresh, 255, cv2.THRESH_BINARY)
    ret, maskr = cv2.threshold(r,RThresh, 255, cv2.THRESH_BINARY)


    #因要替换蓝色底,因此需要判断哪些像素是蓝底像素,判断时,要求经过阈值处理的G、R分量为0,B分量为255
    # 把符合此要求的灰度图作为处理图像的掩膜就能得到输入图像的背景色区域
    #如果要处理非蓝底的,则需要进行下面两行代码的修改将非底色的其他两个颜色的掩膜相或后求反,再与底色的掩膜相与
    maskrg = cv2.bitwise_not(cv2.bitwise_or(maskr,maskg))
    maskbgr = cv2.bitwise_and(maskb,maskrg)

    #由于在边界位置可能存在像素值情况可能与其他背景色不同的情况,因此可能需要进行背景掩膜的扩展膨胀(MORPH_DILATE)处理,且迭代次数可能也有不同,视具体图像而定

    if MorphOpCount:#背景色掩膜进行扩张处理
        kernal = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
        maskbgr = cv2.morphologyEx(maskbgr, cv2.MORPH_DILATE , kernal, iterations=MorphOpCount)


    #获得背景掩膜的反图像得到前景掩膜
    maskbgrInv = cv2.bitwise_not(maskbgr)

    #获取背景掩膜对应的白色背景对应图像
    bgWhite = cv2.bitwise_and(bgWhite, bgWhite, mask=maskbgr)

    #将输入图像应用前景掩膜,得到输入图像的前景,并将该前景与掩膜处理后的白色背景相叠加获得最后处理图像
    photoFront = cv2.bitwise_and(photo,photo,mask=maskbgrInv)
    result = cv2.bitwise_or(photoFront,bgWhite)

    #显示处理图像并设置鼠标回调函数,当出现未完全处理好的噪点时,通过鼠标获得该噪点位置的像素值,以调整前面的阈值处理的阈值
    cv2.imshow('pic',result)
    cv2.setMouseCallback('pic', OnMouseEvent,result)

    cv2.waitKey(0)

使用的自定义公用模块函数readImgFile,其功能请参考《https://blog.youkuaiyun.com/LaoYuanPython/article/details/111351901 OpenCV-Python图形图像处理:自用的一些工具函数功能及调用语法介绍》中的介绍。

三、测试过程

3.1、处理图片说明

本次介绍以百度“蓝底相片”找到的图片(如果涉及侵权请博客留言处理)作为处理对象介绍:
在这里插入图片描述

2、获取图像的背景色的阈值

怎么来确认R、G、B的阈值呢?网上有蓝底相片RGB值的多种说法,一方面太过理想化,另一方面说法还矛盾,怎么办呢?其实很简单,相片的左上角一般为底色,将图像加载后,看前几个像素的R、G、B值,让其作为参考阈值上下浮动一下。上述照片的前几个像素值如下:
在这里插入图片描述
可以看到前几个像素的B、G、R分量中B大于等于238、G小于等于115、R小于等于57,注意阈值处理函数在type为THRESH_BINARY时是小于等于阈值时为0,否则为指定最大值。

3、以前几个像素值作为参考来设定阈值

我们以B、G、R分别设置为237、115、57来设置阈值,不进行膨胀处理来调用上面实现的changePhotoBG函数来看看效果。
执行:changePhotoBG(r'f:\pic\girl.jpg',(237,115,57))

处理效果:
在这里插入图片描述
可以看到在涉及图像边界时处理效果不好,需要叠加背景色的扩展处理,对应调用为:

changePhotoBG(r'f:\pic\girl.jpg',(237,115,57),1)
changePhotoBG(r'f:\pic\girl.jpg',(237,115,57),2)
changePhotoBG(r'f:\pic\girl.jpg',(237,115,57),3)
changePhotoBG(r'f:\pic\girl.jpg',(237,115,57),5)

下图四张照片从上到下、从左到右对应分别做了1、2、3、5次膨胀后的结果图像:
在这里插入图片描述
可以看到膨胀5次以后基本上正常了,但还有一点点边界蓝色,再膨胀的话图片人像就会失真。
点击上述图片蓝色地方,看到输出的像素值如下:

(229, 266):[237 123  62]
(263, 116):[235 117  65]
(104, 269):[207 116  77]

因此根据这些输出调整BGR三个分量的值,将调用改为:changePhotoBG(r'f:\pic\girl.jpg',(206,123,77),3),可以得到如下图像:
在这里插入图片描述
可以看到效果相当不错了,老猿就没有再调整了。

四、小结

本文介绍了基于BGR颜色空间给蓝底照片换底的实现思路及程序代码,并将相关代码做成了一个比较通用的函数,只需要根据照片的背景色调整底色识别的B、G、R三个分量的阈值,就可以适应不同蓝色的背景色的照片情况,如果要处理非蓝底的,就需要将函数中求背景掩膜的两行代码相应进行调整。

本文代码测试完成并写完博文后,在网上找到了一篇类似功能介绍的博文,不过是基于HSV空间的,因此在标题中特地加上“基于RGB颜色空间”。过2天老猿将基于HSV的实现方式也写出,并提供参考博文对照一下。大家可以这2种颜色空间的实现方式都参考一下。具体博文请见《基于HSV颜色空间用OpenCV-Python给照片换底》。

更多图像处理的内容请参考专栏《OpenCV-Python图形图像处理 https://blog.youkuaiyun.com/laoyuanpython/category_9979286.html》、《https://blog.youkuaiyun.com/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》及《图像处理基础知识》的介绍。

如对文章内容存在疑问,可在博客评论区留言,或关注老猿Python 微信公号发消息咨询。
在这里插入图片描述

关于老猿的付费专栏

  1. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.youkuaiyun.com/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
  2. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.youkuaiyun.com/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
  3. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.youkuaiyun.com/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.youkuaiyun.com/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录 》
  4. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取优快云文章信息、博主信息、给文章点赞、评论等实战内容。

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.youkuaiyun.com/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

老猿Python, 跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.youkuaiyun.com/LaoYuanPython ░

老猿Python,跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.youkuaiyun.com/LaoYuanPython ░
OpenCV之颜色空间转换、掩膜(mask)、颜色提取——python实现 一、颜色空间转换 OpenCV有150中颜色空间转换方法,可以使用以下方式查看所有颜色空间转换方法 str.startswith()函数:用于判断一个字符串是否为某个字符串的开头。 dir()函数:带参数时,返回参数的属性、方法列表。 import cv2 flags = [i for i in dir(cv2) if i.startswith('COLOR_')] print(flags... 阅读详情

相关推荐

使用OpenCV把照片变成老照片

使用OpenCV把照片变成老照片

summerriver1的博客 972

OpenCV-Python图像透视变换处理:魔变车牌案例

本文介绍了利用透视变换实现两车交换车牌的详细过程,并提供了OpenCV-Python示例代码。根据老猿的操作经验,利用透视变换操作过程中需要注意: 1. 变换时选择的四个点,从视角来看尽量是在两条平行线上,否则图像变换过程中可能产生畸变,即使逆变换也不一定能变换回来; 2. 变换时最好给图像四周预留一定空间,用为变换后图像大小范围有可能超出原图像大小范文,这样才能保证图像变换后没有图像丢失。

老猿Python 8999

照片换底 - 基于RGB颜色空间的OpenCV-Python实现

在本教程中,我们将学习如何使用OpenCV-Python库在照片中进行背景替换。RGB颜色空间是一种常用的颜色表示方法,它使用红色、绿色和蓝色三个颜色通道来描述一个像素的颜色。这将使得前景图像中的像素保持原样,而背景图像中的像素将被设置为全黑。你可以根据自己的需求对代码进行修改和扩展,以实现更复杂的效果。这将生成一个二值掩码,其中白色像素表示前景,黑色像素表示背景。接下来,我们将背景图像调整为与照片相同的大小,以确保两者具有相同的尺寸。函数将前景图像和背景图像合并在一起,得到最终的结果图像。

DevScript的博客 99

python(opencv2、PIL)将图片透明背景转换成白色背景的两种方法

这两种方法都可以将透明背景转换为任意颜色背景,并支持在任意颜色背景之间进行转换。可以根据具体需求选择合适的工具和方法。通过上述封装函数,可以更方便地将带透明背景的图片转换为白色背景的图片。OpenCV方法函数封装。

消极的人永远是对的,积极的人选择勇往直前 2718

OpenCV-Python实战(1)——OpenCV简介与图像处理基础

OpenCV 是一个的跨平台计算机视觉库,可以运行在 Linux、Windows 和 Mac OS 操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时也提供了 Python 接口,实现了图像处理和计算机视觉方面的很多通用算法。在本文中,将介绍 OpenCV 库,包括它的主要模块和典型应用场景,同时使用 OpenCV-Python 实战讲解图像处理基础要点。

盼小辉丶的博客 27万+

VBA常见错误 - “错误3706,未找到提供程序,该程序可能未正确安装”解决方法

1、问题描述 在利用VBA编程时,引用其它表格数据,出现以下问题: (1)运行“错误3706,未找到提供程序,该程序可能未正确安装”。 (2)引用数据失败 2、解决方法 下载“Access 2010 数据库引擎”,并安装即可。 https://www.microsoft.com/en-us/download/details.aspx?id=54920 AccessDatabaseEngine 2010 官方安装包,官网下载不了的可以来这里下载。(1)运行“错误3706,未找到提..

Nemuel的博客 3万+

python-opencv代码给证件照换底色

一、opencv是什么? 图片来源 二、使用步骤 1.cv2.imread():读取图片 2.img.shape读入像素 3.cv2.resize():图像缩放 4.cv2.cvtColor():图片转换为灰度图 5.1.cv2.inRange():二值化处理 5.2.cv2.threshold()二值化处理 6.cv2.erode/cv2.dilate腐蚀膨胀 7.遍历像素点替换背景颜色 8.imshow():展示图片

weixin_57194935的博客 5225

如何把Excel的数据导入python?

Python数据分析——excl导入数据的简单方法(xlrd) 本文的初衷是发现网上很多Excel导入Python都没有结合具体Excel文档进行讲解,所以这篇文档将会呈现一个简单快速的Excel+Python的入门方法。 开发环境 Prerequisites: 在开始用Python导入Excel之前,要配置好自己的开发环境,最好有IDE(terminal也可)+安装相应的数据分析包。 IDE :pycharm,vscode,etc 数据分析包:matplotlib,xlrd,numpy,etc 导入数

qq_40783513的博客 7万+

OpenCV-Python图形图像处理:自用的一些工具函数功能及调用语法介绍

为了支持进行图像处理测试,老猿将一些经常需要使用到的功能做成了函数放到了公用模块opencvPublic中,在博文中的代码直接引用了这些函数,但对阅读博文的读者可能会造成了一定的困难,为此老猿将在本文中就这些公用函数的功能和调用格式进行统一说明,后续博文中都不再单独介绍。大家可以根据功能介绍实现自己的函数来配合测试,老猿实现的代码在付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题

老猿Python 4586

PLSQL Developer新手必看:如何避免安装过程中的常见坑

本文为PL/SQL Developer新手提供了详尽的安装与配置避坑指南。从版本选择、注册码使用、汉化包安装到Oracle客户端连接配置,逐一解析常见问题并提供解决方案,帮助开发者快速搭建稳定的PL/SQL开发环境,顺利开启Oracle数据库编程工作。

g9h0i1的博客 653

基于FPGA的IIR数字滤波器设计

一种是在直接法的基础上,采用预见的算法,目的是提高系统的吞吐量(指对于网络、端口设备或者其他的设施,单位时间内成功传输数据的数量,比特、字节和分组是吞吐量常用的单位),带有预见算法编程实现的IIR数字滤波器有更多的优点,例如:数据传送速度快,效率高等等;设计模拟滤波器时,它的电路一般都很复杂,而且分析起来也很麻烦,电路的复杂性就决定了使用的器件必定很多,很复杂,就这一方面看来,数字滤波器的设计要更加简单灵活,并且模拟电路不容易改变系统的参数,它的性能还很容易受到温度环境的影响,使得噪声很大。

毕业设计区博客 2129

使用opencv-python库,修改照片背景颜色

【代码】使用opencv-python库,修改证件照背景颜色。

weixin_68271225的博客 790

十二、基于FPGA实现slave SelectMAP配置逻辑

slave SelectMAP配置

weixin_41838250的博客 8755

基于HSV颜色空间用OpenCV-Python给照片换底

本文介绍了基于HSV空间的给照片换底的实现思路及程序示例,HSV由于对颜色的识别更准确,因此得到的图像效果比RGB颜色空间更好。同时HSV的蓝色的H值非常精确,因此不需要象BGR空间一样需要结合照片去确认BGR三通道的范围,因此上述代码对于所有蓝底照片都适用。

老猿Python 3297

SAP 行业扫盲系列之一:SAP 从业者的分类

本文简单介绍了 SAP 从业者的分类,限于笔者狭隘的视角,可能存在遗漏或者不恰当的地方,希望大家在评论区指出。 那些在知乎咨询上向我提问关于进入 SAP 行业建议的朋友们,也请大家提问时注明自己想具体从事 SAP 行业哪一类的工作,这样才能得到更让你们满意的回复。感谢阅读。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1589

置顶必读(1) | 2026最新首发,全网最全 Spring Boot 学习宝典(附思维导图)

从0到1以知识点+实例+项目的教学模式对SpringBoot框架由浅入深进行学习,快来跟bug菌一起学习吧。

**My Coding Family** 16万+

给照片换底色(python+opencv)

生活中,我们有时需要更换照片的底色,例如证件照,有需要蓝底的,也有需要红底的。给照片换底色实现方法有很多,用phothshop、各种图片修改装饰软件都能够做到。那么在计算视觉角度看,实现给照片换底色的方法如何实现呢?🦄 三、修改图片颜色方法二(遍历图像,将像素值点替换修改为指定颜色)二、修改图片颜色方法一(遍历图像,将像素值点替换修改为指定颜色)# 图像高度 × 图像宽度 × 图像通道数。#图像数据类型:unit8,8位无符号整型。把图像修改成白底的图,更改背景:蓝色→白色。🦄 一、分析照片基本信息。

逆境清醒的博客 6134

基于MATLAB自动发电控制(AGC)仿真系统的设计与实现:电力系统频率稳定与功率平衡的深入解析

自动发电控制(AGC)是电力系统运行中的一个关键功能,其主要任务是通过自动调节发电机组的输出功率,使得电网中的频率稳定在规定范围内,并维持发电与负荷的动态平衡。当电力负荷发生变化时,AGC会立即响应,调整发电机的功率输出,以避免电网频率的剧烈波动。维持系统频率稳定:电网频率通常应维持在标准值(例如50Hz或60Hz)附近。当负荷波动或电力需求突然变化时,AGC通过调节发电机输出,确保频率不发生过大的偏离。实现区域内的功率平衡。

qq_38334677的博客 1112

【python实现照片换底,红、蓝、白】

python代码实现照片换底。

xaing1314的博客 907

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Python实现RGB转Lab颜色空间,PS:和PhotoShop转换结果一样

由于工作要求,需要把rgb颜色转成Lab颜色空间。网上一搜一大把的代码,但是和PS一对比,基本上都不对。 下面这张图是OpenCV官方文档的计算方法。 用Python实现代码如下: from math import pow param_13 = 1.0 / 3.0 param_16116 = 16.0 / 116.0 Xn = 0.950456 Yn = 1.0 Zn = 1.0...

BigBoySunshine的专栏 7200

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

python证件照换底色_python利用opencv实现证件照换底

网上交证件照的时候不同单位对底色的要求不一样,当你手里只有一张蓝底照片,却要求交红底或者白底的证件照时,不免就尴尬了些。此时的你为了避免重拍的麻烦,不得不打开ps一点一点地去抠图换背景,费时费力。opencv今天就给大家介绍一下python利用opencv库进行蓝底换红底或者白底照片的操作。1.强大的opencv库说到图像处理,不得不提opencv库。它是一个跨平台的计算机视觉库,可以运行在不同操...

weixin_39654823的博客 1383

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

几种颜色空间(RGB,YUV,YIQ,HSI)的基本概念及转换

首先,我们先来了解下有关颜色的基本概念 一、色彩的基本概念 1、彩色的三要素 亮度:即人眼对光的明亮程度的感受。 色调:人眼能看到的颜色种类,与光的波长有关 饱和度:颜色深浅程度。与各种颜色混入白光的比例有关。 以上 色调 + 饱和度 = 色度 2、三基色原理 三基色可以通过适当比例的混合组成自然界中任何一种颜色 由于人眼对于红绿蓝三种色光最为敏感,并且由这三种颜色能组成的颜色范围最广,故一般选用...

the_sangzi_home的博客 1万+

OpenCV—python 颜色空间(RGB,HSV,Lab)与 颜色直方图

一、数据准备 二、划分训练集-测试集 三、特征表示 对图片数值化 常用特征: 颜色直方图(Color Histograms) 方向梯度直方图(Histograms of Oriented Gredient,HOG) 局部二值模式(Local Binary Pattern,LBP) 四、分类算法 逻辑回归 ...

红叶谷 wsp_1138886114的博客 7万+

在Python中使用OpenCV将RGB格式的图像转换为HSV格式的图像

An HSV is another type of color space in which H stands for Hue, S stands for Saturation and V stands for Value. HSV是另一种颜色空间,其中H代表色相 , S代表饱和度 , V代表Value 。 A Hue represents color. It is an angle from...

cumt30111的博客 1万+

python opencv rgb转hsv_Python-OpenCV中图像颜色空间转换

[TOC]本文主要记录Python-OpenCV中cv2.cvtColor()的使用;cv2.cvtColor()转换图像的颜色空间;官方文档def cvtColor(src, code, dst=None, dstCn=None):"""转换图像的颜色空间Argument:src: 原图像;code: 指定颜色空间转换类型;dst: 目标图像;与原图像大小深度一致;dstCn: 指定目标图像通道...

weixin_29357243的博客 1691

OpenCV python(三)【图像预处理:颜色空间转换】 && 颜色识别

本篇文章简单介绍了颜色空间和色域的区别、基于opencv-python的颜色空间转换,并将其结合inRange实现颜色识别并二值化。

xztli的博客 5020
上一篇: OpenCV-Python直方图计算calcHist函数详解
下一篇: 基于HSV颜色空间用OpenCV-Python给照片换底
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值