社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

故事开始了,Python 图像算法取经之旅 365 天的第 1 天

梦想橡皮擦 • 4 年前 • 526 次点击  
阅读 22

故事开始了,Python 图像算法取经之旅 365 天的第 1 天

本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!

如果你有想要交流的想法、技术,欢迎在评论区留言。

图像算法 这个系列橡皮擦一直不太想写,因为太难了,对技术栈体系是一无所知的。而且橡皮擦数学目前估计就剩下初二的水平了,承担这样一个系列博客,想想自己就挺害怕的。

不过人想要进步,就要跳出自己的舒适圈,挑战一下有难度的事情。

这个系列会写一年之久,希望有能和橡皮擦坚持到最后一天的朋友。

学习者背景描述

对橡皮擦自己画个画像,如果你比我强,你也可以坚持到最后一步。

目前我的硬技能只有一个:

  • 熟悉 Python 语法,对其比较了解,所以不存在编程语言基础障碍

学习上的难点:

  • 数学基础差,目前剩余支持停留在二元一次方程阶段;
  • 图像识别理论体系不健全,存在走弯路的可能;

以上是对自己的简单画像,概括下来就是有编程基础,无任何数学基础。

总之一句话:

任何事情都是开始之后,才有未来,而不是总在想,一直不敢开始。

说干就干,学习的过程是这样子的。

  • 每天只能学习大概 1 个小时左右,毕竟打工人不好持续输出,而且我还欠着滚雪球学 Python 那个专栏呢;
  • 文章不是每天都更新,可能 2~3 天学习到都更新出来;
  • 因为没有体系,学习的过程会充满跳跃性,橡皮擦尽量把过程忠实的记录下来,这些可能都是比较珍贵的学习经历;

因为有编程功底,所以涉及语言基础部分,基本都会略过。

本系列课程你能得到

  • 你可以近距离围观一个老程序员是如何学习一套新技能的;
  • 你可以看一下一个老网虫是如何查找资料的;
  • 最终你也可能随着橡皮擦一起学会 Python 图像处理;
  • 过程中你可能需要跟着橡皮擦一起去补数学基础,没准就学会数学啦。

第一天这一个小时发生的事情

对于学习 Python 图像处理,不能说完全陌生,至少在橡皮擦印象中存在一个 OpenCV 可以去弄。

有印象就是重要的内容,先从它下手。

打开搜索引擎,购物网站,CSDN 搜索,检索资料,找一些自己感兴趣的内容,先点开看看,是不是靠谱。

![故事开始了,Python 图像算法取经之旅 365 天的第 1 天](img-blog.csdnimg.cn/20201224213… =600x) 打开百度,看到前面有几篇文章,下面是官方网址了,先存储一下官网,放心这种东西绝对有用。

docs.opencv.org/master/d0/d…

然后习惯性的把网址后面的东西都删除掉。

docs.opencv.org

得到下面的网站,呦呵,不同版本的文档,存着吧,肯定有用。

故事开始了,Python 图像算法取经之旅 365 天的第 1 天

在把网址中的 docs 修改为 www,得到官网地址:opencv.org/,顺便认识一下 OpenCV 标准写法与 LOGO:

故事开始了,Python 图像算法取经之旅 365 天的第 1 天

百度到的第一篇文章不错,可以依据它进行初步的学习,感谢作者。

www.cnblogs.com/silence-cho…

然后注意,看到一个作者的文章不错,一定要翻翻这个作者的博客,没准就能发现一个系列的内容,这些都是有价值的。

故事开始了,Python 图像算法取经之旅 365 天的第 1 天

排名第二的就是 CSDN 的博主的博客了,打开看了一下,内容比较简单,好在他也有一个小专栏。

blog.csdn.net/sunny2038/c…

看完标题之后,差点就劝退了橡皮擦,文章有点老了,2013 年,那时橡皮擦还在北京做开发呢。

故事开始了,Python 图像算法取经之旅 365 天的第 1 天

存储一些待看博客之后,在去 CSDN 搜索查看一下,恩?,看到了大佬。

故事开始了,Python 图像算法取经之旅 365 天的第 1 天

注意 CSDN 有个神奇的操作,可以选择发布时间与博主等级。

故事开始了,Python 图像算法取经之旅 365 天的第 1 天

再次得到了一些文章,下面还有一个是橡皮擦喜欢做的事情,就是打开购物网站,搜一下看看有没有好书。

看了一下,并没有特别想买的,你可以直接去当当网查看一下评分和书评,找一找有没有自己喜欢的书,不过一般不建议直接购买,有些书还是比较坑的,可以先搞一本电子版的看看,如果觉得内容好,再去购买一本实体的书籍。

故事开始了,Python 图像算法取经之旅 365 天的第 1 天

到这里,基本上可以收集到 OpenCV 的一些可参考资料了,不要找太多,选一个自己比较喜欢的作者,然后先耐住性子看一下,碰到不会的再去检索更多的资料。

注意参考资料时间距离现在越近越好,而且一定要看原版博客的内容,别看转载的,转载的格式很容易混乱。

查找原版博客,可以复制文章标题在搜索引擎查找,很容易找到。

橡皮擦最后选择的还是上文提及的搜索引擎排第一的博主,毕竟他是去年发布的文章,阅读量还可以。

故事开始了,Python 图像算法取经之旅 365 天的第 1 天

1 个小时剩余的时间不多了,接下来先把 OpenCV 安装上再说,使用 pip install opencv-python 安装即可,安装包还挺大的,30 多 M。 故事开始了,Python 图像算法取经之旅 365 天的第 1 天

安装完毕先试试手,看看这个库怎么用。

import cv2
img = cv2.imread("./test_img.jpg")
cv2.imshow("img",img)
复制代码

运行代码发现图片一闪而过,奇怪,核对参考博文代码发现,还需要设置一个等待条件,当按下某些固定按键的时候,关闭窗口。

import cv2
img = cv2.imread("./test_img.jpg")
cv2.imshow("img", img)

key = cv2.waitKey(0)
# 按 esc 键时,关闭所有窗口
if key == 27:
    print(key)
    cv2.destroyAllWindows()
复制代码

故事开始了,Python 图像算法取经之旅 365 天的第 1 天

先记录两个方法,别求太细致,先弄懂基本使用规则即可。

cv2.imread()

读取图片,关于其它参数,可以使用 help(cv2.imread) 获取。只有一个必填参数。

故事开始了,Python 图像算法取经之旅 365 天的第 1 天

  • imread(img_path[,flags]) 读取图片,返回图片对象
    • img_path: 图片的路径,即使路径错误也不会报错,但打印返回的图片对象为 None
    • flags:
      • cv2.IMREAD_COLOR,读取彩色图片,图片透明性会被忽略,为默认参数,也可以传入 1
      • cv2.IMREAD_GRAYSCALE,按灰度模式读取图像,也可以传入 0
      • cv2.IMREAD_UNCHANGED,读取图像,包括其 alpha 通道,也可以传入-1

除了图片路径先掌握以外,其它的先放着,什么彩色图片,灰度图像,alpha 通道,都通通不管,后文咱们可以每个参数都实验一下。

最后在看一下图片对象是什么类型的。

import cv2
img = cv2.imread("./test_img.jpg")
# help(cv2.imread)
print(type(img))
复制代码

有点意思,输出的是 <class 'numpy.ndarray'>,与 numpy 还有关联,事情越来越复杂啦。

cv2.imshow()

显示图片,从博文中学到的内容如下:

  • imshow(window_name,img):显示图片,窗口自适应图片大小
    • window_name: 指定窗口的名字
    • img:显示的图片对象

可以指定多个窗口名称,显示多个图片

检索资料发现 imshow 就是 image show 的缩写,貌似已经猜到了,还有 imshow 一般用在开发测试中,在实际的场景中都是使用第三方的 UI 控件去显示图像。

最后一点需要注意的是:imshow 之后必须有 waitKey 函数,否则显示窗内将一闪而过,不会驻留屏幕。

waitKey(millseconds)  键盘绑定事件,阻塞监听键盘按键,返回一个数字(不同按键对应的数字不同)
    millseconds: 传入时间毫秒数,在该时间内等待键盘事件;传入 0 时,会一直等待键盘事件

destroyAllWindows(window_name)
    window_name: 需要关闭的窗口名字,不传入时关闭所有窗口
复制代码

方法的简单使用已经掌握了,接下来就要针对性的学习了,先看一下 imread 方法,找到官方手册。

docs.opencv.org/4.4.0/d4/da…

使用方法和注意事项写的清清楚楚,不过是英文的。

故事开始了,Python 图像算法取经之旅 365 天的第 1 天

参数说明如下:

  • filename Name of file to be loaded.
  • flags Flag that can take values of cv::ImreadModes

可选参数为枚举值:docs.opencv.org/4.4.0/d4/da…

随意修改一下,因为上文提及了当按灰度模式读取图像时,设置为 0。学习效果可直接设置为 0 ,尝试一下,结果得到一个黑白图片。

import cv2
img = cv2.imread("./test_img.jpg", 0)

cv2.imshow("第一个窗口", img)

key = cv2.waitKey(0)
# 按 esc 键时,关闭所有窗口
if key == 27:
    print(key)
    cv2.destroyAllWindows()
复制代码

故事开始了,Python 图像算法取经之旅 365 天的第 1 天

发现上文弹出的窗口乱码了,也就是说 imshow 第一个参数设置为中文会出现乱码,如何修改可以直接进行简单,但是检索之后还是建议你使用英文吧。因为检索了一下并无好的解决方案,网上提及的答案是:由于在 OpenCV-Python 包中,imshow 函数的窗口标题是 gbk 编码,而 Python3 默认 UTF-8 编码。但是并不能解决。

本部分结束之后,对于 retval = cv.waitKey([, delay]) 方法,是 imshow 方法要求的,如下图所示。

故事开始了,Python 图像算法取经之旅 365 天的第 1 天

注意按下键盘 Ctrl+C 复制的时候,窗口自动关闭。

可以直接在 cv.waitKey 方法中设置等待 10 秒自动关闭,代码为 cv2.waitKey(10000)

destroyAllWindows 方法,没有什么要说的,关闭窗口。

今天的 OpenCV 尾声

本篇博客主要介绍了一下本系列内容的书写背景,同时配置了一下基本的环境,案例很简单,希望这整个学习过程能对你产生帮助。


博主 ID:梦想橡皮擦,希望大家点赞、评论、收藏。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/117478