空间免费背景代码【qq免费空间背景代码】
使用Python AI轻松编辑背景
你有一张自己很喜欢的照片,但你注意到周围图像的背景在照片上产生了抑制效果。你觉得如果背景不存在,或者通过在特定图像中保留你的照片并稍作修改,将会得到一张高质量的人像照片。
执行以下操作的许多方式之一包括支付相当高的费用购买软件或聘请专业人员完成项目。还可能有一些显著的免费资源,但它们的可靠性或效率在某些限制下可能令人质疑。
与解决这些问题的麻烦相比,设计自己的签名方法来处理此任务难道不是很酷吗?
借助Python,可以轻松完成以下项目。通过更好地理解计算机视觉和人工智能,可以显著提高从图像中去除背景的性能和质量。在本文中,我们的主要目标是去除不必要的背景并保留所需的图像。
对于计算机视觉项目的初学者,我强烈推荐阅读我之前的一篇文章,该文章是OpenCV计算机视觉库基础知识的详细指南。以下是方便访问的链接。
https://towardsdatascience.com/opencv-complete-beginners-guide-to-master-the-basics-of-computer-vision-with-code-4a1cd0c687f9
在本文的这一部分,我们将专注于使用Python去除特定图像的背景。对于这个特定项目,版本要求高于Python 3.7且低于当前的Python 3.11。我们将使用的库在版本3.7或更低版本上无法正常运行。
根据我的测试,由于适当的scipy模块版本无法下载,rembg库在Python 3.7版本上无法工作。然而,在Python 3.9上,我在执行本文中的程序时完全没有问题,只需使用以下pip install命令。
rembg库是通过深度神经网络开发的,主要使用u2net架构来处理去除背景的任务。有几种架构的修改和许多经过测试的方法可提供最佳结果。rembg库还提供了对GPU安装的访问,以实现更快的处理。有关更多信息和对该库的理解,我强烈建议查看以下链接的官方GitHub存储库。
现在,我们已经对用于背景去除项目的库有了简要了解,是时候导入此项目所需的两个基本库了。如前所述,rembg库是我们使此任务变得简单和直接的首选。更高级的开发人员可以为项目创建自己的神经网络。
我们将使用的另一个重要库是Pillow库,它是处理图像相关任务的最佳库之一。此库通常已在Python中默认安装。如果没有,可以使用简单的pip安装命令进行安装。以下是代码片段中提到的必要库。
一旦导入了所需的库,下一步是指定要去除背景的图像的输入路径。我们还将指定输出路径在工作目录中,标题为“Image.png”,以存储没有背景的透明图像。读者可以选择任何其他文件名和格式。
对于最终的去除背景过程,我们将使用pillow库打开具有指定输入路径的输入图像。然后,我们将使用rembg库的remove功能从相应图像中消除整体背景,仅保留狗这个主要焦点实体的图像。
透明背景与狗的图像然后保存在工作目录中。执行以下操作的代码片段如下所示。
成功编译上述程序后,将生成狗的以下透明图像。
一旦我们有了狗的透明图像,我们可以继续文章的下一部分,根据需要更改并应用新的背景。读者可以根据自己的选择选择任何理想的背景,只要图像的大小相同。让我们在下一节中进一步探讨这个主题!
一旦我们完成了去除背景的工作,更加好奇的开发人员可能会想知道如何处理先前获得的透明图像。对于这一步,我们将遵循类似且相对简单的过程。我们将透明狗图像与上面的背景相结合。请注意,可以为此任务使用任何选择的背景。我们将用于此任务的唯一库要求是pillow库,用于在透明图像和上面图像中进行操作。
在下一步中,我们将打开用于此背景编辑项目所需的两个图像。我们将首先打开透明的狗图像,然后是将要放置的新背景图像。以下是打开以下图像的代码片段。
一旦打开了这两个图像,确保所有图像的大小相同是至关重要的。如果两个图片的大小不匹配,将背景粘贴到透明的狗图像上的操作将无法正常工作。因此,验证图像大小并在需要时适当调整大小是必要的步骤。
对于按步骤跟随此指南的观众,如果您已单击提供的图像并将它们下载到您的工作目录,则会注意到所有图像的大小都是880 x 557。如果图像的大小不匹配,请根据需要调整它们的大小。如下所示,可以验证图像大小。
最后,我们将使用Pillow库的paste命令将背景图像粘贴到透明图像上。第一个参数表示第一个图像(具有透明背景的狗),下一个属性是起始坐标,最后一个是关键参数,表示相应图像的掩码。
Alpha通道被用作掩码,允许用户将背景与透明狗图像合并。我们可以将新创建的图像保存在工作目录中。执行以下操作的代码如下所示。
一旦我们完成了这个项目,我们应该能够生成以下图像。
通过这两步过程,我们成功地去除了以前的背景,提取了所需的实体,并将提取的透明背景的狗放入新的背景中。对于此指南的更高级变体,我建议尝试在单个项目中完成这两个任务。此指南可以过渡到视频和实时项目中进行背景更换,就像使用绿幕更换背景一样,根据用户的愿望进行操作。
拥有一张自己的精彩照片,却不喜欢背景或想要在不同的氛围或地区看到自己,有时可能会成为一个问题。手动编辑背景可能会很繁琐,使用昂贵的软件进行编辑也可能不切实际。其他免费的背景去除选项的结果可能也不会产生最佳效果。然而,借助AI和Python,可以在几行简单的代码内完成此项目。
在本文中,我们了解了如何使用Python AI和几行代码去除、编辑和替换当前背景,使用你的照片或具有重要意义的图像。我们利用了Pillow和rembg库,有效地从原始图像中去除了离群值背景。一旦过滤了背景,我们可以通过使用原始图像及其相应的蒙版添加新的所需背景。
要对项目进行额外的改进,我强烈建议将此项目从图像扩展到视频甚至实时操作。对于高级学-,建议尝试学-并构建深度神经网络,从头开始执行去除背景的任务。
在pycharm里边怎么设置代码背景图的?
大家好,我是Python进阶者。
前几天在Python白银交流群【Kim】问了一个Python问题,然后他发出来的代码如下图所示:
可以看到代码中有背景图,是不是看上去蛮高大上的?那么这个背景图是怎么加上去的呢?这里给大家介绍一下方法。
这里【Kim】说到,这个是我vsode使用的插件,叫background-cover,如下图所示:
当然,如果有的小伙伴不用这个,而是使用pycharm的话,在pycharm里,依次点击settings–appernace–backgroup设置就行。
感谢【Kim】大佬的分享~
如果你也有类似这种Python相关的小问题,欢迎随时来交流群学-交流哦,有问必答!
大家好,我是Python进阶者。这篇文章主要盘点了一个Pycharm代码背景图设置的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。
最后感谢粉丝【Kim】提出的问题,感谢【魏哥】给出的思路,感谢【冯诚】等人参与学-交流。
【提问补充】温馨提示,大家在群里提问的时候。可以注意下面几点:如果涉及到大文件数据,可以数据脱敏后,发点demo数据来(小文件的意思),然后贴点代码(可以复制的那种),记得发报错截图(截全)。代码不多的话,直接发代码文字即可,代码超过50行这样的话,发个.py文件就行。
轻松玩转windows控制台(八)阴影效果的彩色文字和字体大小设置
这两天在网上看到有视频回顾国内计算机发展的历史,其中UCDOS6.0、wps1.0等经典软件界面,一下子让我回到了学生时代。
UCDOS6.0
WPS1.0
我是从96年接触电脑,97年学-计算机,98年进入计算机专业,那时候学的数据库还是foxbase,后来我严重怀疑之所以学Foxbase,是因为教材是我们老师编写的缘故……那时候学的最好的就是汇编语言和c语言了。最后悔没认真学的就是数据结构和freeBSD,当时教FreeBSD的老师,现在想来当时真的算是个大神了,只可惜年轻不懂事,没有认真听课……
正好这段时间在写《轻松玩转windows控制台》系列教程,今天就来找一找DOS界面下的“图形界面”的感觉吧。
先贴上来一张程序运行的效果图:
在命令行时代,为了使界面有立体感,就是通过图形的重叠,以及颜色搭配,制造出立体感的。我的美术功底非常的差,差到中学时代参加美术考试,苹果画成了“方形”,不是夸张。所以,这个效果就将就看吧,本来还想再模拟一些效果,想想还是作罢。
这个效果图的原理分成几部分实现,首先画一个灰色的矩形,然后再错位画一个红色的矩形,然后再输出一段文字,其中这段文字进行字体大小的调整。
我们先对这个程序的代码功能分段讲解,最后再发布完整的程序源码。
准备工作不是必须要做的,只是为了让显示效果更好。比如,我们可以将屏幕缓冲区的行数和列数设置好,以获得一个合适的控制台窗体的显示尺寸。
当然,之前文章中我们已经说过,屏幕缓冲区尺寸不等同于窗口显示尺寸,所以我们需要再将窗口尺寸设置为和屏幕缓冲区相同,这样就不会出现滚动条。
首先,我们需要先获取当前控制台程序的句柄,代码如下:
设置屏幕缓冲区的代码如下:
设置控制台窗口尺寸的代码如下:
注意,屏幕缓冲区的COORD结构中的坐标x和y分别表示行数和列数。窗口尺寸中的SMALL_RECT结构表示窗口相对于屏幕缓冲区的位置坐标,含义不同。
矩形背景实际上是由FillConsoleOutputAttribute函数绘制的。函数原型如下:
第一个参数传入窗口句柄,第二个参数是字符的前景色和背景色,第三个参数要设置字符单元的个数,也就是设置连续的字符个数(重要!超过一行,自动换行到下一行),第四个参数是COORD 结构,传入了一个坐标,作为指定的起始位置,最后一个参数是输出型参数,如果打算向外传输数据,理论上可以设置为NULL(空指针),但是实际开发中不建议这样做,赋值一个DWORD类型的指针即可,不需要赋初值。
我们搞清楚了FillConsoleOutputAttribute函数的用法,现在看看在程序中如何使用的。
继续下一段代码:
这段代码定义了两个背景区域的颜色。bgColor_shadow 定义的是灰色背景。bgColor 定义的红色背景,准备显示的文字用黄色,并且增强了明亮度。
FOREGROUND_INTENSITY和BACKGROUND_INTENSITY,一个是前景色的INTENSITY,一个是背景色的INTENSITY,单独使用时,表示灰色,如何和同类型的颜色混用时,表示增加颜色,使这个颜色更明亮。
这两行代码的主要作用就是获取屏幕缓冲区中当前字符的属性,即csbi.wAttributes成员的值。后面字符属性被更改后,当想恢复到现在的字符属性时,可以随时通过csbi.wAttributes来恢复默认属性。
这段代码中,display_rect 表示文字的背景区域面积,shadow_rect 表示阴影的区域面积,所谓阴影,就是被display_rect遮挡的区域面积。
为了实现背遮挡,只要将第二个区域和第一个区域错位就可以了,效果逼真度要看美术的,错多少位置,阴影部分的颜色如何调色等。然后再用代码实现。
col_num 表示区域面积每行填充的字符单元(列数),line_num 表示要填充多少行。注意,虽然我们定义了SMALL_RECT结构,表示矩形面积,但实际上,控制台不支持一次性填充屏幕缓冲区中的某个局部矩形面积,只能逐行的填充。所以要用for循环实现。
另外,FillConsoleOutputAttribute的最后一个参数,时输出型参数,用来记录由多少个字符单元受到函数操作的影响,在本程序中我们并未用到,理论上可以设为NULL,但根据实际经验,不要设为NULL。
这段代码实现的效果如下:
这段代码的作用时对后面要输出的文字进行字体大小的设置。使用了一个CONSOLE_FONT_INFOEX结构体,注意,不要和CONSOLE_FONT_INFO结构体混淆了。
CONSOLE_FONT_INFO结构体的定义如下:
CONSOLE_FONT_INFOEX结构体的定义如下:
这2个结构体其实能能通过dwFontSize成员来获得当前字体的大小,但要设置字体大小,需要调用SetCurrentConsoleFontEx函数来实现,而这个函数使用的结构体就是 CONSOLE_FONT_INFOEX类型,而不是CONSOLE_FONT_INFO类型。我们来看下这个函数的原型:
第一个参数没什么可讲的,就是控制台窗体句柄,第二个参数如果为 TRUE,则设置当前窗口最大化后的最大窗口情况下对应的字体信息。 如果为 FALSE,则设置当前窗口时的字体信息。最后一个参数就是CONSOLE_FONT_INFOEX的指针,这是一个典型的输入型参数。(输入型参数和输出型参数可以看我的。。。文章链接)
如何使用CONSOLE_FONT_INFOEX类型变量?
第一个参数必须要这样使用: cfi.cbSize = sizeof(cfi);第二个参数nFont一般默认为0,第三个参数dwFontSize是一个COORD结构体,注意,这个结构体不是表示坐标的,而是表示后面输出的文字的字符宽度和高度。 X 成员包含宽度,而 Y 成员包含高度。
第四个参数FontFamily表示字体间距和系列。 有关此成员可能值的信息,可以看 TEXTMETRIC 结构的 tmPitchAndFamily 成员的说明。参数FontWeight表示字体粗细。 粗细范围为 100 到 1000,按 100 的倍数表示。 例如,正常粗细为 400,而 700 为粗体。FaceName表示要使用的字体名称(如 Courier 或 Arial)。为了降低学-的复杂度,此处暂时不展开,后期的文章中会详细的讲解这几个参数的用法,不影响的本程序的功能实现。
输出文本内容,可以有很多钟方法,比如FillConsoleOutputCharacter 函数和WriteConsoleOutputCharacter函数,前者是允许批量输出字符到屏幕缓冲区,后者是单个字符串的输出。本例程序钟用的就是后者。
WriteConsoleOutputCharacter函数原型如下:
第一个参数不用多言,一定是窗口句柄,第二个参数是要写入屏幕缓冲区的字符或字符串。第三个参数是要写入的字符个数(不是字节个数,是字符个数)。第四个参数是
COORD 结构,表示的是坐标,指定第一个字符在屏幕缓冲区的起始坐标。
最后一个参数和刚才的FillConsoleOutputAttribute函数的最后一个参数的用法类似,第二个参数的字符串当函数执行完毕后,实际输出到屏幕缓冲区的字符个数将被存放到这个参数所指向的区域。这个实际上就是指向DWORD的指针。按照经验,即使在程序中没起作用,也不建议设为NULL。
本例中程序代码如下:
输出要显示的文字,所在的字符单元自动使用刚才设置好的字符属性。直到调用下面这行代码,才恢复之前默认的字符属性:
下面这行代码,是为了让对屏幕缓冲区所做的修改能够立即生效:
这是c语言的用法,C++可以这样用:std::cout << std::flush;在刚才的代码中,const char*是c语言的编程风格,可以替换成LPCTSTR类型,这是windows编程风格。关于windows编程风格的自定义数据类型,在我的这篇文章里由详细讲解
下面是完整的程序源码,可以直接编译运行。所用的环境为CLion2023,默认的clang编译器,64位win10最新版本。实际上,在devC++和vs2022里也可以编译通过。如果有任何问题,欢迎随时交流。