OpenCV-Python速查表:从导入图像到人脸检测
moboyou 2025-05-04 15:27 32 浏览
——本文对图像裁剪、调整大小、旋转、阈值、模糊、在图像上绘图和书写、人脸检测和使用轮廓图像检测对象都进行了解释。
什么是OpenCV-Python?
OpenCV是一个开源的计算机视觉(computer vision)和机器学习库。它拥有超过2500个优化算法,包括经典和最先进的计算机视觉和机器学习算法。它有很多语言接口,包括Python、Java、c++和Matlab。
这里,我们将处理Python接口。
安装
- 在Windows上, 请在这里查看指南。地址:https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_setup/py_setup_in_windows/py_setup_in_windows.html
- 在 Linux上, 请在这里查看指南。地址:https://docs.opencv.org/trunk/d7/d9f/tutorial_linux_install.html
图像导入&显示
警告1: 通过openCV读取图像时,它不是以RGB 颜色空间来读取,而是以BGR 颜色空间。有时候这对你来说不是问题,只有当你想在图片中添加一些颜色时,你才会遇到问题。
有两种解决方案:
- 将R — 第一个颜色值(红色)和B — 第三个颜色值(蓝色) 交换, 这样红色就是 (0,0,255) 而不是(255,0,0)。
- 将颜色空间变成RGB:
使用rgb_image代替image继续处理代码。
警告2: 要关闭显示图像的窗口,请按任意按钮。如果你使用关闭按钮,它可能会导致窗口冻结(我在Jupyter笔记本上运行代码时发生了这种情况)。
为了简单起见,在整个教程中,我将使用这种方法来查看图像:
来源:Pixabay
裁剪
来源:Pixabay
裁剪后的狗狗
其中: image[10:500,500:200] 是 image[y:y+h,x:x+w]。
调整大小
来源:Pexels
调整大小到20%后
这个调整大小函数会保持原始图像的尺寸比例。
更多图像缩放函数,请查看这里。(
https://www.tutorialkart.com/opencv/python/opencv-python-resize-image/ )
旋转
左图: 图片来自Pexels的Jonathan Meyer。右图: 进行180度旋转之后的狗狗。
image.shape输出高度、宽度和通道。M是旋转矩阵——它将图像围绕其中心旋转180度。
-ve表示顺时针旋转图像的角度 & +ve逆表示逆时针旋转图像的角度。
灰度和阈值(黑白效果)
来源:Pexels
gray_image 是灰度图像的单通道版本。
这个threshold函数将把所有比127深(小)的像素点阴影值设定为0,所有比127亮(大)的像素点阴影值设定为255。
另一个例子:
这将把所有阴影值小于150的像素点设定为10和所有大于150的像素点设定为200。
更多有关thresholding函数的内容,请查看这里。(
https://docs.opencv.org/3.4/d7/d4d/tutorial_py_thresholding.html )
左图:灰阶狗狗。右图:黑白狗狗。
模糊/平滑
左图:图像来自Pixabay。右图:模糊后的狗狗。
高斯模糊函数接受3个参数:
- 第一个参数是要模糊的图像。
- 第二个参数必须是一个由两个正奇数组成的元组。当它们增加,模糊效果也会增加。
- 第三个参数是sigmaX和sigmaY。当左边位于0时,它们会自动从内部大小计算出来。
更多关于模糊函数的内容,请查看这里。(
https://docs.opencv.org/3.1.0/d4/d13/tutorial_py_filtering.html )
在图像上绘制矩形框或边框
左图:图像来自Pixabay。右图:脸上有一个矩形框的狗狗。
rectangle函数接受5个参数:
- 第一个参数是图像。
- 第二个参数是x1, y1 -左上角坐标。
- 第三个参数是x2, y2 -右下角坐标。
- 第四个参数是矩形颜色(GBR/RGB,取决于你如何导入图像)。
- 第五个参数是矩形线宽。
绘制一条线
左图:图像来自Pixabay。右图:两只狗狗用一条线分开。
line函数接受5个参数:
- 第一个参数是要画的线所在的图像。
- 第二个参数是x1, y1。
- 第三个参数是x2, y2。
- 第四个参数是线条颜色(GBR/RGB,取决于你如何导入图像)。
- 第五个参数是线宽。
在图片上写入文字
左图:图像来自Pixabay。右图:两只狗狗用一条线分开。
putText函数接受 七个参数:
- 第一个参数是要写入文本的图像。
- 第二个参数是待写入文本。
- 第三个参数是x, y——文本开始的左下角坐标。
- 第四个参数是字体类型。
- 第五个参数是字体大小。
- 第六个参数是颜色(GBR/RGB,取决于你如何导入图像)。
- 第七个参数是文本线条的粗细。
人脸检测
这里没有找到狗狗照片,很遗憾:(
图片来自Pixabay,作者:Free-Photos。
detectMultiScale函数是一种检测对象的通用函数。因为我们调用的是人脸级联,所以它会检测到人脸。
detectMultiScale函数接受4个参数:
- 第一个参数是灰阶图像。
- 第二个参数是scaleFactor。因为有些人脸可能离镜头更近,所以看起来会比后台的人脸更大。比例系数弥补了这一点。
- 检测算法使用一个移动窗口来检测对象。minNeighbors定义在当前对象附近检测到多少对象,然后再声明检测到人脸。
- 与此同时,minsize给出了每个窗口的大小。
检测到两张人脸。
轮廓——一种对象检测方法
使用基于颜色的图像分割,你可以来检测对象。
cv2.findContours & cv2.drawContours 这两个函数可以帮助你做到这一点。
最近,我写了一篇非常详细的文章,叫做《使用Python通过基于颜色的图像分割来进行对象检测》。你需要知道的关于轮廓的一切都在那里。(
https://towardsdatascience.com/object-detection-via-color-based-image-segmentation-using-python-e9b7c72f0e11 )
最终,保存图片
总结
OpenCV是一个非常容易使用的算法库,可以用于3D建模、高级图像和视频编辑、跟踪视频中的标识对象、对视频中正在做某个动作的人进行分类、从图像数据集中找到相似的图像,等等。
最重要的是,学习OpenCV对于那些想要参与与图像相关的机器学习项目的人来说是至关重要的。
英文原文:
https://qiniumedia.freelycode.com/vcdn/1/%E4%BC%98%E8%B4%A8%E6%96%87%E7%AB%A0%E9%95%BF%E5%9B%BE3/opencv-python-cheetsheet.pdf 译者:好酒不上头
相关推荐
- 黄道十二宫杀手密码51年后被破解,来自两位程序员和数学家合作
-
杨净边策发自凹非寺量子位报道|公众号QbitAI黄道十二宫杀手(ZodiacKiller)可能是世界上最知名的高智商连环杀手,52年来从未被抓获。他的事迹已被改编成了多部好莱坞电影。△...
- 深入剖析MediaCodec解码器的基本原理及使用「建议新手收藏」
-
一,MediaCodec工作原理MediaCodec类Android提供的用于访问低层多媒体编/解码器接口,它是Android低层多媒体架构的一部分,通常与MediaExtractor、MediaMu...
- Retrofit WebService 实践
-
前言作为Android开发,平时和后端聊得最多的除了喝酒就是接口。常用语:Restful和WebService,前者现在聊得多,后者以前聊得多。默认含义分别为:Restful:HTTP协议...
- 建议收藏!175部4K UHD版本经典高分电影洗版参考目录(2015之前)
-
本内容来源于@什么值得买APP,观点仅代表作者本人|作者:1L789近两年很多经典高分老电影陆续开始重制成4KUHD版本,虽然我早已将这些电影的BD蓝光版收入,但纠结一番后还是花了不少时间将其全部...
- 2 个月的面试亲身经历告诉大家,如何进入 BAT 等大厂?
-
这篇文章主要是从项目来讲的,所以,从以下几个方面展开。怎么介绍项目?怎么介绍项目难点与亮点?你负责的模块?怎么让面试官满意?怎么介绍项目?我在刚刚开始面试的时候,也遇到了这个问题,也是我第一个思考的问...
- 详解Android官推Kotlin-First的图片加载库
-
前言Coil是一个非常年轻的图片加载库,在2020年10月22日才发布了1.0.0版本,但却受到了Android官方的推广,在AndroidDevelopersBackst...
- webview 渲染机制:硬件加速方式渲染的Android Web
-
webview渲染是什么?webview渲染是用于展现web页面的控件;webview可以内嵌在移动端,实现前端的混合式开发,大多数混合式开发框架都是基于webview模式进行二次开发的w...
- 因为我对Handler的了解,居然直接给我加了5K
-
1Handler是什么?android提供的线程切换工具类。主要的作用是通过handler实现从子线程切换回主线程进行ui刷新操作。1.1为什么Handler能实现线程切换?在创建Handler的...
- 「经典总结」一个View,从无到有会走的三个流程,你知道吗?
-
前言一个View,从无到有会走三个流程,也就是老生常谈的measure,layout,draw三流程我们都知道Android视图是由一层一层构成的层级结构,直白点说,就是父View包含子View而子V...
- 这些垃圾代码是谁写的?哦,原来小丑竟是我自己
-
程序员是最喜欢自嘲、自黑的群体之一,比如他们常常称自己是“码农”、“程序猿”,再比如他们的工作明明是写代码、修Bug,也有人调侃说:“明明我们是修代码、写Bug!”本文整理了一些程序员“修代码、写...
- 手把手教你爬取天堂网1920*1080大图片(批量下载)——理论篇
-
/1前言/平时我们要下载图片,要要一个一个点击下载是不是觉得很麻烦?那有没有更加简便的方法呢?答案是肯定的,这里我们以天堂网为例,批量下载天堂网的图片。/2项目准备工作/首先我们第一步我们要安装...
- 音视频开发需要你懂得 ffmpeg 开源库的编码原理
-
引言音视频开发需要你懂得音视频中一些基本概念,针对编解码而言,我们必须提前懂得编解码器的一些特性,码流的结构,码流中一些重要信息如sps,pps,vps,startcode以及基本的工作原理,...
- 「8年老 Android 开发」最全最新 Android 面试题系列全家桶(带答案)
-
下面跟大家分享的这些面试题都是互联网大厂真实流出的面试内容,每个问题都附带完整详细的答案,不像网上的那些资料三教九流有的甚至还没答案,这些面试题我也是经过日积月累才整理出来的精品资料。这些面试题主要是...
- 手把手教你爬取天堂网1920*1080大图片(批量下载)——实战篇
-
/1前言/上篇文章手把手教你爬取天堂网1920*1080大图片(批量下载)——理论篇我们谈及了天堂网站图片抓取的理论,这篇文章将针对上篇文章的未尽事宜进行完善,完成图片的批量抓取。/2图片网址解...
- PHP 8.1.9 更新发布
-
CLI:修复了内置服务器通过PHP_CLI_server_WORKERS环境变量的潜在溢出。修正了GH-8952(不再可能有意关闭std句柄)。Core:修复了GH-8923的错误(Windows上的...
- 一周热门
- 最近发表
- 标签列表
-
- curseforge官网网址 (16)
- 外键约束 oracle (36)
- oracle的row number (32)
- 唯一索引 oracle (34)
- oracle in 表变量 (28)
- oracle导出dmp导出 (28)
- oracle 数据导出导入 (16)
- oracle两个表 (20)
- oracle 数据库 字符集 (20)
- oracle安装补丁 (19)
- matlab化简多项式 (20)
- 多线程的创建方式 (29)
- 多线程 python (30)
- java多线程并发处理 (32)
- 宏程序代码一览表 (35)
- c++需要学多久 (25)
- c语言编程小知识大全 (17)
- css class选择器用法 (25)
- css样式引入 (30)
- html5和css3新特性 (19)
- css教程文字移动 (33)
- php简单源码 (36)
- php个人中心源码 (25)
- 网站管理平台php源码 (19)
- php小说爬取源码 (23)