为什么使用Python-OpenCV

虽然python 很强大,而且也有自己的图像处理库PIL,但是相对于OpenCV 来讲,它还是弱小很多。跟很多开源软件一样OpenCV 也提供了完善的python 接口,非常便于调用。OpenCV 的稳定版是2.4.8,最新版是3.0,包含了超过2500 个算法和函数,几乎任何一个能想到的成熟算法都可以通过调用OpenCV 的函数来实现,超级方便。

一、需要工具

Python 作为一种高效简洁的直译式语言非常适合我们用来解决日常工作的问题。而且它简单易学,初学者几个小时就可以基本入门。再加上Numpy 和matplotlib 这两个翅膀,Python 对数据分析的能力不逊于Matlab。Python 还被称为是胶水语言,有很多软件都提供了Python 接口。尤其是在linux 下,可以使用Python 将不同的软件组成一个工作流,发挥每一个软件自己最大的优势从而完成一个复杂的任务。比如我们可以使用Mysql 存储数据,使用R 分析数据,使用matplotlib 展示数据,使用OpenGL 进行3D 建模,使用Qt 构建漂亮的GUI。而Python 可以将他们联合在一起构建一个强大的工作流。

二、入门小试

1、图像读入:cv2.imread()

使用函数cv2.imread() 读入图像。这幅图像应该在此程序的工作路径,或者给函数提供完整路径,第二个参数是要告诉函数应该如何读取这幅图片。

• cv2.IMREAD_COLOR:读入一副彩色图像。图像的透明度会被忽略,

这是默认参数。

• cv2.IMREAD_GRAYSCALE:以灰度模式读入图像

import cv2

img = cv2.imread('lena.jpg',0)

PS:调用opencv,就算图像的路径是错的,OpenCV 也不会提醒你的,但是当你使用命令print(img)时得到的结果是None。

2、显示图像cv2.imshow()

使用函数cv2.imshow() 显示图像。窗口会自动调整为图像大小。第一个参数是窗口的名字,其次才是我们的图像。你可以创建多个窗口,只要你喜欢,但是必须给他们不同的名字。

cv2.imshow('image',img)

cv2.waitKey(0)

3、保存图像cv2.imwrite()

cv2.imwrite('lena.png',img)

==================================================================

三、使用cv2.imread(),cv2.imshow(),cv2.imwrite()读取、显示和保存图像

1、读入图像

使用函数cv2.imread(filepath,flags)读入一副图片

filepath:要读入图片的完整路径

flags:读入图片的标志

cv2.IMREAD_COLOR:默认参数,读入一副彩色图片,忽略alpha通道

cv2.IMREAD_GRAYSCALE:读入灰度图片

cv2.IMREAD_UNCHANGED:顾名思义,读入完整图片,包括alpha通道

import numpy as np

import cv2

img = cv2.imread('1.jpg',cv2.IMREAD_GRAYSCALE)

2、显示图像

使用函数cv2.imshow(wname,img)显示图像,第一个参数是显示图像的窗口的名字,第二个参数是要显示的图像(imread读入的图像),窗口大小自动调整为图片大小。

cv2.imshow('image',img)

cv2.waitKey(0)

cv2.destroyAllWindows() #dv2.destroyWindow(wname)

cv2.waitKey顾名思义等待键盘输入,单位为毫秒,即等待指定的毫秒数看是否有键盘输入,若在等待时间内按下任意键则返回按键的ASCII码,程序继续运行。若没有按下任何键,超时后返回-1。参数为0表示无限等待。不调用waitKey的话,窗口会一闪而逝,看不到显示的图片。

cv2.destroyAllWindow()销毁所有窗口

cv2.destroyWindow(wname)销毁指定窗口

3、保存图像

使用函数cv2.imwrite(file,img,num)保存一个图像。第一个参数是要保存的文件名,第二个参数是要保存的图像。可选的第三个参数,它针对特定的格式:对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第三个参数表示的是压缩级别。默认为3.

注意:

cv2.IMWRITE_JPEG_QUALITY类型为 long ,必须转换成 int

cv2.IMWRITE_PNG_COMPRESSION, 从0到9 压缩级别越高图像越小。

cv2.imwrite('1.png',img, [int( cv2.IMWRITE_JPEG_QUALITY), 95])

cv2.imwrite('1.png',img, [int(cv2.IMWRITE_PNG_COMPRESSION), 9])

4、图片操作

1、使用函数cv2.flip(img,flipcode)翻转图像,flipcode控制翻转效果。

flipcode = 0:沿x轴翻转

flipcode > 0:沿y轴翻转

flipcode < 0:x,y轴同时翻转

imgflip = cv2.flip(img,1)

2、复制图像

imgcopy = img.copy()

3、颜色空间转换

#彩色图像转为灰度图像

img2 = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)

灰度图像转为彩色图像

img3 = cv2.cvtColor(img,cv2.COLOR_GRAY2RGB)

5、示例

读入一副图像,按’s’键保存后退出,其它任意键则直接退出不保存

import numpy as np

import cv2

img = cv2.imread('1.jpg',cv2.IMREAD_UNCHANGED)

cv2.imshow('image',img)

k = cv2.waitKey(0)

if k == ord('s'):

# wait for 's' key to save and exit

cv2.imwrite('1.png',img)

cv2.destroyAllWindows()

else:

cv2.destroyAllWindows()

四、cv2.warpAffine 参数详解

opencv中的仿射变换在python中的应用并未发现有细致的讲解,函数cv2.warpAffine的参数也模糊不清,今天和大家分享一下参数的功能和具体效果,如下:

官方给出的参数为:

cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) → dst

其中:

src - 输入图像。

M - 变换矩阵。

dsize - 输出图像的大小。

flags - 插值方法的组合(int 类型!)

borderMode - 边界像素模式(int 类型!)

borderValue - (重点!)边界填充值; 默认情况下,它为0。

上述参数中:M作为仿射变换矩阵,一般反映平移或旋转的关系,为InputArray类型的2×3的变换矩阵。

flages表示插值方式,默认为 flags=cv2.INTER_LINEAR,表示线性插值,此外还有:cv2.INTER_NEAREST(最近邻插值) cv2.INTER_AREA (区域插值) cv2.INTER_CUBIC(三次样条插值) cv2.INTER_LANCZOS4(Lanczos插值)

日常进行仿射变换时,在只设置前三个参数的情况下,如 cv2.warpAffine(img,M,(rows,cols))可以实现基本的仿射变换效果,但可以出现“黑边”现象,如图:

这对后续的处理往往造成很大的困扰,第六个参数可以选择填充的颜色,默认为黑色。在python中设置warpAffine的参数与c++中有所不同,必须指明参数的名称,具体如下:

c++中:warpAffine(src,img,M,Size(a,b),1,0,Scalar(255,255,255));

python中:

cv2.warpAffine(img,M,(rows,cols),flags=cv2.INTER_,borderMode=cv2.BORDER_REFLECT,borderValue=(255,255,255))

在python 中有一个好处是不必按顺序设置,直接指明所设置的参数即可,如将上述图片边界区域填充为白色:

cv2.warpAffine(img,M,(lengh,lengh),borderValue=(255,255,255))

效果图:

参考:

https://blog.csdn.net/Eddy_zheng/article/details/48286735

https://blog.csdn.net/djcxym/article/details/52097812

https://blog.csdn.net/qq878594585/article/details/81838260

原文链接:https://blog.csdn.net/weixin_43593330/article/details/108822695

python opencv pdf脚本之家_Python-OpenCV相关推荐

  1. python opencv pdf脚本之家_python opencv实现证件照换底功能

    本文实例为大家分享了python opencv实现证件照换底功能的具体代码,供大家参考,具体内容如下 思路:先转到HSV空间,利用颜色提取背景制作掩模版mask,然后通过按位操作提取人像和制作新背景, ...

  2. python opencv pdf脚本之家_OpenCV 3和Qt5计算机视觉应用开发 PDF 影印含源码版

    给大家带来的一篇关于计算机视觉相关的电子书资源,介绍了关于OpenCV3.Qt5.计算机视觉.应用开发方面的内容,本书是由机械工业出版社出版,格式为PDF,资源大小117.2 MB,阿敏·艾哈迈迪·泰 ...

  3. python pdf脚本之家_Python实现简单拆分PDF文件的方法

    本文实例讲述了Python实现简单拆分PDF文件的方法.分享给大家供大家参考.具体如下: 依赖pyPdf处理PDF文件 切分pdf文件 使用方法: 1)将要切分的文件放在input_dir目录下 2) ...

  4. 实战python网络爬虫脚本之家_python爬虫实战,批量下载网站视频

    pip3 install requests 测试样例 加上序言总共有16个视频,我们用python爬虫技术批量下载到本地. https://learning.dcloud.io/#/?vid=0 ​ ...

  5. python打出由边框包围的_python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)...

    图像边框的实现 图像边框设计的主要函数 cv.copyMakeBorder()--实现边框填充 主要参数如下: 参数一:源图像--如:读取的img 参数二--参数五分别是:上下左右边的宽度--单位:像 ...

  6. python车牌识别系统开源代码_python+opencv实现车牌定位功能(实例代码)

    写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验三,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验三. 由于时间紧张,代码没有进行任何优化, ...

  7. 笨办法学python3 pdf 脚本之家_解决python3输入的坑——input()

    如下所示: a,b,c,d = input() 很简单的代码,如果输入为 1 -1 -2 3 结果会报错,原因在于input函数会将你的输入作为python脚本运行,那么输入就变成了 1-1 -2 3 ...

  8. python制作浏览器 脚本之家_基于Python打造账号共享浏览器功能

    本篇文章介绍的内容会涉及到以下知识: PyQt5的使用; Selenium的使用; 代理服务器的架设和使用: 一.账号限制之痛 在如今的互联网中,免费的信息和资源占据了很大一部分,各类互联网应用提供了 ...

  9. python给pdf加图片签名_Python生成个性签名图片获取GUI过程解析

    这篇文章主要介绍了Python生成个性签名图片获取GUI过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 先来看看程序运行的样子: 所以,程序 ...

最新文章

  1. HTC One 802w(联通双卡版本)刷机过程(只是记录大概的过程,网上已经有各步骤的详细过程)...
  2. 在系统出现未处理的错误时,在Global的Application_Error记录下错误
  3. java8 stringbuilder_为什么 Java 8 中不再需要 StringBuilder 拼接字符串
  4. 史上最完整的iOS DIY framework 详细教程(一)
  5. linux钩子函数和回调函数,Linux Kernel 学习笔记10:hook函数
  6. JavaScript绑定this
  7. Monte Carlo Rendering De-noising
  8. CCIELAB之路由重分布之单点双向重分布的汇总路由反馈
  9. Linux V4L2 框架分析
  10. 项目开发-文档-软件需求规格说明书模板文档命名规则及格式要求(免费下载链接)
  11. 【工具】百度云破解版不用会员高速下载 分享
  12. 全面认识MOS管,一篇文章就够了
  13. 我是如何拿到腾讯offer的(干货面经+经验分享)
  14. 没学历的IT人生没那么悲催,献给程序员们
  15. Python解析URL参数的方法
  16. [VS_C#实战案例](1)批量提取文件夹内txt文件的指定字符串生成excel表格
  17. PHP 处理多重数组
  18. 关于ip-guard认证考试专栏下架通知
  19. 文件服务器 bkf恢复,.bkf文件恢复方法。
  20. 【框架回顾】SSM+Vue

热门文章

  1. 阿里身份实名认证实例
  2. 虚幻引擎4简介,UE4简介--这是一个强大的游戏开发引擎
  3. Python数据分析入门(一)——初探数据可视化
  4. ABAP 发布webservice调用外部webservice
  5. 面试送命题,你为什么从上家公司离职?(面试题总结大全)
  6. 数学----三角函数公式推导
  7. html加css做成的简易木马轮播图
  8. STM32芯片烧录后上电不运行
  9. java会员卡管理系统下载_基于jsp的会员卡管理系统-JavaEE实现会员卡管理系统 - java项目源码...
  10. 我的RUST学习——【第九章 9-1】panic! 与不可恢复的错误