python opencv图像处理程序_Python-OpenCV学习(四):基本图像处理

转载请注明出处:danscarlett的博客园

参考资料:

目录:

读取 imread

显示 imshow

存储 imwrite

缩放 resize

加边框 copyMakeBorder

裁剪 img[x_start:x_end,y_start:y_end]

1.图像读取:

cv2.imread(fileName,flags=None)

函数功能:读入图像

参数解释:

filename 图像所在此程序的工作路径,或者完整的路径名

flag 告诉函数应该如何读取这幅图片。

cv2.IMREAD_COLOR或0读入一副彩色图像。图像的透明度会被忽略,这是默认参数。

cv2.IMREAD_GRAYSCALE或1以灰度模式读图

例子:

- 代码:

#-*- coding: utf-8 -*-

importcv2#灰度图模式加载一副彩图并显示在窗口中

img1 = cv2.imread('1.jpg',1)

cv2.imshow('gray',img1)

cv2.waitKey(0)#彩图模式加载一副彩图并显示在窗口中

img2 = cv2.imread('1.jpg',0)

cv2.imshow('colorful',img2)

cv2.waitKey(0)

- 结果:首先弹出gray窗口,关闭该窗口后,弹出colorful窗口。

670539-20170712172822915-142800370.png

670539-20170712172841728-2072207634.png

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

#-*- coding: utf-8 -*-

importcv2

img2= cv2.imread('2.jpg',2)#文件夹里没有2.jpg

print(img2)

输出:

670539-20170713100812572-1694067401.png

2.显示图像

1 cv2.imshow(winname,mat)

函数功能:显示图像。窗口会自动调整为图像大小。你可以创建多个窗口,只要你喜欢,但是必须给他们不同的名字。

参数解释:

winname窗口的名字

mat图像对象

例子:

- 代码:

#-*- coding: utf-8 -*-

importcv2

img2= cv2.imread('1.jpg')

cv2.imshow('image',img2)

cv2.waitKey(0)#cv2.waitKey() 是一个键盘绑定函数。需要指出的是它的时间尺度是毫#秒级。函数等待特定的几毫秒,看是否有键盘输入。特定的几毫秒之内,如果#按下任意键,这个函数会返回按键的ASCII 码值,程序将会继续运行。如果没#有键盘输入,返回值为-1,如果我们设置这个函数的参数为0,那它将会无限#期的等待键盘输入。它也可以被用来检测特定键是否被按下,例如按键a 是否#被按下,这个后面我们会接着讨论。

cv2.destroyAllWindows()#cv2.destroyAllWindows() 可以轻易删除任何我们建立的窗口。如果#你想删除特定的窗口可以使用cv2.destroyWindow(),在括号内输入你想删#除的窗口名。

- 结果:

670539-20170713101620353-194803968.png

3.保存图像

cv2.imwrite(filename,img,params=None)

函数功能:将图像保存到指定的文件。

参数:

filename 文件名称

image 需要存储的图像文件

params 存储的格式或者编码

CV_IMWRITE_JPEG_QUALITY 对于JPEG文件,质量用0-100标记,默认值为95.

CV_IMWRITE_PNG_COMPRESSION 对于PNG文件,压缩级别用0-9表示,较高的值意味着较小的尺寸和较长的压缩时间,默认值为3.

CV_IMWRITE_PXM_BINARY   对于PPM、PGM或者PBM文件,这是二进制格式标识(0或1)。默认值为1。

例子:

- 代码

#-*- coding: utf-8 -*-

importcv2

img= cv2.imread('1.jpg')#将原图存储到另一个文件中

cv2.imwrite('2.jpg',img)

img2= cv2.imread('2.jpg')

cv2.imshow('copy',img2)

cv2.waitKey(0)#将原图的10%质量存储到jpg

cv2.imwrite('3.jpg',img,(cv2.IMWRITE_JPEG_QUALITY,10))

img3= cv2.imread('3.jpg')

cv2.imshow('JPG',img3)

cv2.waitKey(0)#将原图压缩率9/10存储到PNG

cv2.imwrite('4.png',img,(cv2.IMWRITE_PNG_COMPRESSION,9))

img4= cv2.imread('4.png')

cv2.imshow('PNG',img4)

cv2.waitKey(0)

- 结果:

670539-20170713104458962-1873600991.png

copy

670539-20170713104844056-938512037.png

JPG

670539-20170713104945150-1960182176.png

PNG

4.图像缩放

cv2.resize(src,dst,fx=None,fy=None,interpolation=None)

函数功能:缩放图片

参数:

src 源文件

dst 目标文件

fx x方向上的像素

fy   y方向上的像素

interpolation 变换的方法

CV_INTER_NN最近邻插值,

CV_INTER_LINEAR 双线性插值 (缺省使用)

CV_INTER_AREA 使用象素关系重采样。当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于 CV_INTER_NN 方法..

CV_INTER_CUBIC 立方插值

例子:

- 代码:

#-*- coding: utf-8 -*-

importcv2

img= cv2.imread('1.jpg')#缩放成200*200的图像#插值方法默认是cv2.INTER_LINEAR,这里指定为最近邻插值

img2 = cv2.resize(img,(200,200))#不直接指定缩放后大小,通过fx和fy指定缩放比例,0.5则长宽都为原来一半#注意指定大小的格式是(宽度,高度)

img3 =cv2.resize(img,(0,0),fx=0.5,fy=0.5,interpolation=cv2.INTER_NEAREST)print('img.shape=',img.shape)print('img2.shape=',img2.shape)print('img3.shape=',img3.shape)

- 结果:

670539-20170713111232337-1552564480.png

5.添加边框

cv2.copyMakeBorder(src,top,bottom,left,right,borderType,dst=None,value=None)

函数功能:复制图像并加上边界

参数:

src 源图像

top,bottem,left,right 分别表示四个方向上边界的长度

borderType  边界的类型

BORDER_REFLICATE    直接用边界的颜色填充, aaaaaa | abcdefg | gggg

BORDER_REFLECT    倒映,abcdefg | gfedcbamn | nmabcd

BORDER_REFLECT_101  倒映,和上面类似,但在倒映时,会把边界空开,abcdefg | egfedcbamne | nmabcd

BORDER_WRAP     类似于这种方式abcdf | mmabcdf | mmabcd

BORDER_CONSTANT   常量,增加的变量通通为value色 [value][value] | abcdef | [value][value][value]

value 仅仅是常量型边界才有意义

例子:

- 代码:

#-*- coding: utf-8 -*-

importcv2importnumpy as np

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

BLUE= [255,0,0]

img2= cv2.copyMakeBorder(img,10,10,10,10,borderType=cv2.BORDER_CONSTANT,dst=None,value=BLUE)

cv2.imshow("img2",img2)

cv2.waitKey(0)

- 结果:

670539-20170713112648806-1603577916.png

6.裁边

直接看例子:

#-*- coding: utf-8 -*-

importcv2importnumpy as np

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

BLUE= [255,0,0]

img2= cv2.copyMakeBorder(img,10,10,10,10,borderType=cv2.BORDER_CONSTANT,dst=None,value=BLUE)#加入边框之后的图像大小:(552, 820),#裁剪出坐标在10-542,10-810之间的像素

img3 = img2[10:542,10:810]

cv2.imshow("img3",img3)

cv2.waitKey(0)

结果:

670539-20170713113419212-1851108314.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/258850.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分针网——怎么轻松学习JavaScript

js给初学者的印象总是那么的“杂而乱”,相信很多初学者都在找轻松学习js的途径。我试着总结自己学习多年js的经验,希望能给后来的学习者探索出一条“轻松学习js之路”。js给人那种感觉的原因多半是因为它如下的特点:A:本身知识很抽…

python时间序列分析航空旅人_用python做时间序列预测一:初识概念

利用时间序列预测方法,我们可以基于历史的情况来预测未来的情况。比如共享单车每日租车数,食堂每日就餐人数等等,都是基于各自历史的情况来预测的。 什么是时间序列? 时间序列,是指同一个变量在连续且固定的时间间隔上…

[Logstash-input-redis] 使用详解

2019独角兽企业重金招聘Python工程师标准>>> Redis插件参数配置详解 工作流程 logstash启动redis插件redis插件获取参数,进行校验工作判断监听模式(list,channel,pattern_channel等),根据不同的监听模式创建监听任务创建redis实例&#xff0c…

雅可比旋转求解对称二维矩阵的特征值和特征向量

问题描述: 给定一个矩阵,如下: A[a11a21a12a22]A=\begin{bmatrix} a_{11}&a_{12}\\ a_{21}& a_{22} \end{bmatrix} 其中满足a12a21.也就是所谓的 对称矩阵。那么如何求解此矩阵的特征值以及特征向量呢?这里我们要用到 …

python画图数据的平均值怎么算的_Python气象数据处理与绘图(2):常用数据计算方法...

对于气象绘图来讲,第一步是对数据的处理,通过各类公式,或者统计方法将原始数据处理为目标数据。 按照气象统计课程的内容,我给出了一些常用到的统计方法的对应函数: import numpy as np 平均值 在计算气候态&#xff0…

Linux下nginx安装与配置

部分Linux发布版的默认安装已经集成了nginx,查看方法ls /usr/local,若已有nginx文件夹说明已集成。nginx依赖库pcre与zlib,且pcre依赖于gcc与gcc-c,因此安装步骤为:安装gcc与gcc-c库安装pcre库安装zlib库安装nginx详细…

几种字符串加密解密的方法

为什么80%的码农都做不了架构师?>>> 第一种:〔 Python 与 Bash Shell 的结合 〕 这个命令会让你输入一个字符串,然后会再输出一串加密了的数字。 加密代码[照直输入]: python -c print reduce(lambda a,b: a*256ord(b), raw_inpu…

java delegate怎么写_美团面试官:你说你们公司的Mybatis分页插件是你写的,给我说说它的设计原理?...

来源:http://my.oschina.net/zudajun大多数框架,都支持插件,用户可通过编写插件来自行扩展功能,Mybatis也不例外。我们从插件配置、插件编写、插件运行原理、插件注册与执行拦截的时机、初始化插件、分页插件的原理等六个方面展开…

SharePoint 2013 处理videoplayerpage.aspx下的个人图片显示有误问题

问题:Personal sites photo cant correct display in the videos pageThe url address of personal sites photo is exist surplus characters. The correct situation is just the characters of "%20", not the characters of "%2520".解决方…

clover引导mbr安装黑苹果_安装黑苹果记录(一)

从来没有接触过macOS(苹果系统),孩子说他用的那台电脑linux不能安装一些软件,问我能不能安装黑苹果,一些软件只有win和mac的客户端,却没有linux版本。他知道我不会给他安装Windows,一个是怕他玩游戏,另外一…

doxygen问题集锦

使用doxygen排版数学公式出错的解决方法 参考:http://blog.csdn.net/huangbo10/article/details/46801949 问题 今天玩了一下doxygen,碰到一个问题 ! Undefined control sequence. l.77 $ y_{\mbox{test}} \mathbb{E}[y_{\mbox{train}}] x $ ? !…

ubuntu中make头文件找不到_和平精英:游戏中找不到人怎么办?这些技巧帮你练出“火眼金睛”...

大家好,欢迎来到《刺激实战教室》,我是你们的老朋友刺激哥。俗话说,电子竞技不需要视力,而这句话也是《和平精英》的一个“痛点”。在《和平精英》这款游戏中,更是如此。在很多时候,敌人就藏在我们的附近&a…

eureka配置_F版本SpringCloud 5—Eureka集群和自我保护机制

源码地址:https://gitee.com/bingqilinpeishenme/Java-Tutorials前言上篇文章中,通过代码搭建了Eureka注册中心和客户端,是Eureka的简单应用,在本文中将会讲解更多关于Eureka服务端的应用以及原理。Eureka 自我保护机制进入自我保…

windows共享内存

在windows编程中避免不了使用共享内存,因为他是进程间通信、文件读取最简单的方式,有书上还说其他进程间通讯机制如管、油槽、WM_COPYDATA底层也是用的共享内存机制。关于使用方法还是请参考MSDN。 最近听说使用共享内存不安全,可能会被其他进…

Chrome指令/追踪Http请求相关

2019独角兽企业重金招聘Python工程师标准>>> Chrome HTTP抓包,在地址栏输入 chrome://net-internals/#requests转载于:https://my.oschina.net/u/2292141/blog/895603

离散卷积与自相关

本文章转载自:http://www.cnblogs.com/einyboy/archive/2012/12/30/2839633.html 一、 定义 离散信号f(n),g(n)的定义如下: N-----为信号f(n)的长度 s(n)----为卷积结果序列,长度为len(f(n))len(g(n))-1 例: f(n) [1 2 3]; g(n) [2 3 1]; …

excel打开后灰色不显示内容_Excel二维表转换,一分钟就够

点击蓝字关注我们44个Excel 使用技巧基本方法作为职场人,加班累如狗。如何更轻松的工作并获得喜人的报酬便是咱们职场人一直追求的“生活哲理”,说到Excel,对于办公室群体而言实在是太常见不过了,不管做什么,咱们都会跟它打交道&a…

卷积的循环矩阵求解方法

通常我们求解一维卷积或者二维卷积都是采用模板平移的方法,今天我们介绍一种新的求解方法,可以一次性求出所有的结果。 一维卷积 卷积定义 对于两个长度分别为m和n的序列x(i)和g(i)有, h(i)x(i)∗g(i)∑jx(j)g(i−j)h(i)=x(i)*g(i)=\sum_…

static_cast, dynamic_cast, const_cast探讨【转】

首先回顾一下C类型转换: C类型转换分为:隐式类型转换和显式类型转换 第1部分. 隐式类型转换又称为“标准转换”,包括以下几种情况:1) 算术转换(Arithmetic conversion) : 在混合类型的算术表达式中, 最宽的数据类型成为目标转换类…

RANSAC算法注记

今天学习了一下RANSAC随机样本一致性算法,其在图像融合、特征点匹配方面有很强大的应用。网上已经有很多人写了关于这方面的文档,就不再造轮子了。特此罗列出来,以供后续参考。 我的数学之美(一)——RANSAC算法详解 …