如何使用python获取系列中小姐姐的照片
Sketch作为近乎完美的表达手法,有它自己的美感。随着数字技术的发展,素描不再是专业画家的专利。今天的文章就到这里,系列讲一下如何使用python获取小姐姐的草图。文章分为两部分:
第一部分介绍使用python生成草图的两种思路
第二部分介绍如何串联获取草图
获取草图的两种思路
节这些这些两个概念是在opencv中实现的,不包含在深度学习相关的内容中。基本思想是读入图像,然后通过各种变化将其转换为草图。为了便于演示,我们首先看到小姐姐的照片作为测试工具。
1)漫画风格
让我们从第一种风格开始。该方法的主要思想是使用一种称为“阈值处理”的技术,该技术基于图像的对象和背景之间的灰度。度差异,并执行像素级分割。
如果要将图像变成只显示黑白的草图,则需要对其进行二值运算。 Opencv 提供了两种二进制方法:threshold() 和adaptiveThreshold() 。与threshold()相比,adaptiveThreshold()可以根据图像不同部分的亮度分布进行局部自动校正,因此称为自适应二值化。下图是彩色图像二值化的结果。
上面的概念听起来可能比较模糊,不懂也没关系。让我们重点讨论如何在实践中应用它们。
第一步,读取图像并将其转换为灰度。此步骤被视为正常活动。相信使用opencv的同学也写过类似的代码。
img_rgb = cv2.imread(src_image)
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2GRAY)
第二步,使用adaptiveThreshold()方法合并图像。工作中的大部分参数用于设置自适应二值化算法和阈值。
img_edge = cv2.adaptiveThreshold(img_gray, 255,
cv2.ADAPTIVE_THRESH_MEAN_C,
cv2.THRESH_BINARY, blockSize=3, C=2)
第三步,保存转换后的图像
cv2.imwrite(dst_image, img_edge)
经过上述步骤,我们得到了一张新的黑白图像,我们来看看转换后图像的结果。
看看转换后的图像,虽然整体设计没有问题,但结果却很不理想,不能称为草图。这是因为adaptiveThreshold()会对图像的一小部分局部区域进行二值化操作。因此,对于一些清晰度较高、分色较差的图像,会出现如上图所示的模糊情况。
这个问题的解决办法非常简单。只需添加以下代码行即可在二值化之前对原始图像进行解扰。
img_gray = cv2.medianBlur(img_gray, 5)
我们来看看这次制作的草图(如下图)。看起来比较舒服,有手绘漫画的感觉。
2)写实法
通过上面的方法,虽然最后我们得到了一张很好的草图,但似乎“横空出世”了。为了获得更真实的草图,我们尝试了不同的方法。
该方法的主要思想是通过“融合胶片”的方式获得原始图像的重要线条。具体应用流程如下:
第一步,同上,使用opencv读取图像,创建灰度图像。
第二步,对灰度图像进行模糊操作。经过测试,使用上面提到的cv2.medianBlur()中值滤波函数对最终图像进行模糊效果并不好。这里我们尝试使用高斯滤波器来平滑图像。代码如下:
img_blur = cv2.GaussianBlur(img_gray, ksize=(21, 21),
sigmaX=0, sigmaY=0)
其中,参数ksize代表高斯核的大小,sigmaX和sigmaY代表高斯核在X、Y方向的标准差。
第三步,使用cv2.divide()方法将原始图像和模糊图像组合起来。 cv2.divide() 基本上对两个图像执行像素除法操作,结果可以简单地解释为两个图像之间的明显差异。我们看一下代码:
cv2.divide(img_gray, img_blur, scale=255)
第四步,保存生成的图像。代码与之前的方法相同。让我们直接看看获得的草图的结果。
从结果来看,这种方法得到的素描线条更加细腻,素描效果更好。 2
获取一组小姐姐照片
在这一部分,我们要实现获取一组小姐姐照片的任务。基于上面两种草图结果的对比,这里采用第二种方法来实现图像到草图的转换。转换。
那么,接下来要解决的就是图像源问题。最近,不少项目都成功从抖音或知乎获取到了美丽的小姐姐。其实除了这些网站之外,还有很多可以拍出小姐姐漂亮照片的网站。
我不会在文章中展示网站自己的内容。为了描述爬取图像的含义,我简单说一下页面的结构:网站首页列出了N个主题,每个页面包含一张小姐姐M的图片,结构图如下:
各个页面URL的构造也非常清晰。例如下图中的页面URL是http://www.waxjj.cn/2794.html,其中2794是主题页面的ID号。查看页面的html代码(下图),我们可以看到每个图像都在标签下。
在这种情况下,基本上,我们可以通过某种解析器获取每个图像的URL。但仔细检查发现,整个网页的HTML代码中只有包含图片URL的部分有完整的http连接。因此,您可能需要考虑使用正则表达式来提取图像 URL。实现这部分工作的代码如下。
在上面的代码中,我们将主题页面的ID作为要保存的图像名称的一部分。 save_jpg() 函数会将每个图像转换为草图并保存在本地。
由于我们需要使用opencv对抓取到的图像进行各种计算和转换,所以从请求中获取到的图像必须先保存在本地,然后再读回opencv中。基于上述想法,我们构建了如下所示的 save_jpg() 函数,其中 rgb_to_sketch() 函数涵盖了上面第一部分中描述的获取第二个 sketch 的方法。
在main函数中,我们必须指定我们想要获取的主题页面的ID号,并构建一个URL列表:
def main():
idlist = ['id1', 'id2']
urllist = ['http://www.waxjj.cn/'+x+'.html' for x in idlist]
jpgurls = get_jpg_urls(urllist)
上面是完整的代码,我们看一下结果。跑~~
其实程序员想避免头发程序员还担心头发,我♷♽还担心失去'程序员和的头发'当然小姐姐看起来更有魅力。不好!
大刘 新手学习Python
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。