OpenCV3 for python3 学习笔记1
1、读/写图像文件
OpenCV的imread()函数和imwrite()函数能支持各种静态图像文件格式。不同系统支持的文件格式不一样,但都支持BMP格式,通常还应该支持PNG、JPEG和TIFF格式。
无论哪种格式,每个像素都会有一个值,但不同格式表示像素的方式有所不同。如:
import cv2
import numpy as np
import os img = np.zeros((300, 300), dtype = np.uint8) # 通过二维NumPy数组来简单创建一个黑色的正方形图像
print(img) # 在控制台打印该图像
print(img.shape) # 通过shape属性来查看图像的结构,返回行和列,如果有一个以上的通道,还会返回通道数
img = cv2.cvtColor(img,cv2.COLOR_GRAY2BGR) # 利用cv2.cvtColor函数将该图像转换成BGR格式
print(img)
print(img.shape)
cv2.namedWindow("Image") # 显示该图像
cv2.imshow("Image", img)
cv2.waitKey ()
结果为:
[[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
...
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]]
# 每个像素都由一个8位整数来表示,即每个像素值的范围是0~255
(300, 300)
[[[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]] [[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]] [[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]] ... [[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]] [[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]] [[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]]]
# 现在每个像素都由一个三元数组表示,并且每个整型向量分别表示一个B,G和R通道。其他色彩空间(如HSV)也以同样的方式来表示像素,只是取值范围和通道数目不同(例如,HSV色彩空间的色度值范围为0~180)
(300, 300, 3)

2、可读取一种格式的图像文件,然后将其保存为另一种格式。如:
image = cv2.imread('flower.png') # 将‘flower.jpg’的图片与.py文件放在同一目录下,或者使用绝对路径
cv2.imwrite('flower.jpg',image)

在默认情况下,即使图像文件为灰度格式,imread()函数也会返回BGR格式的图像,BGR与RGB表示的色彩空间相同,但字节顺序相反。
下面列出的选项可作为imread()函数的参数:
IMREAD_ANYCOLOR = 4
IMREAD_ANYDEPTH = 2
IMREAD_COLOR = 1
IMREAD_GARYSCALE = 0
IMREAD_LOAD_GDAL = 8
IMREAD_UNCHANGED = -1
cv2.imread(‘图像名称’,’可选参数’)
可选参数决定读入图像的模式:
0:读入的为灰度图像(即使图像为彩色的)
1:读入的图像为彩色的(默认);
如下面的例子将加载的PNG文件作为灰度图像(在这个过程中会丢失所有的颜色信息),然后又将其保存为灰度的PNG图像。
garyImage = cv2.imread('flower.jpg',cv2.IMREAD_GRAYSCALE)
cv2.imwrite('flower.png',garyImage)

无论采用哪种模式,imread()函数会删除所有alpha通道的信息(透明度)。imwrite()函数要求图像为BGR或灰度格式,并且每个通道要有一定的位(bit),
输出格式要支持这些通道。例如,bmp格式要求每个通道有8位,而PNG允许每个通道有8位或16位
储存图像函数:cv2.imwrite(‘保存的图像名’,图像,‘参数’)
正常的图像储存使用就是cv2.imwrite(‘保存的图像名’,图像),后面一个参数默认,保存的图像名还得带类型,比如jpg,bmp等等,OpenCV目前支持读取bmp、jpg、png、tiff等常用格式,
第三个参数较复杂,还得分是jpg、bmp等等图像的类型不同而不同,其实就是决定了图像储存大小,清晰度的,默认的就很好
此外,还有一种显示图像的方式。
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('flower.jpg',0);#打开为灰度图像
plt.imshow(img, 'gray') #必须规定为显示的为什么图像
# plt.xticks([]),plt.yticks([]) #隐藏坐标线
plt.show() #显示出来,不要也可以,但是一般都要了

OpenCV3 for python3 学习笔记1的更多相关文章
- OpenCV3 for python3 学习笔记3-----用OpenCV3处理图像2
3.5.Canny边缘检测 OpenCV提供了Canny边缘检测函数来识别边缘.它有5个步骤:使用高斯滤波器对图像进行去噪.计算梯度.在边缘上使用最大抑制(NMS).在检测到的边缘上使用双阀值去除 假 ...
- OpenCV3 for python3 学习笔记3-----用OpenCV3处理图像一
本文的内容都与图像处理有关,这时需要修改图像,比如要使用具有艺术性的滤镜.外插(extrapolate)某些部分.分割.粘贴或其他需要的操作. 1.不同色彩空间的的转换 OpenCV有数百种关于在不同 ...
- OpenCV3 for python3 学习笔记2
1.安装 如果你是第一次使用OpenCV Python开发包,想要安装OpenCV Python只要执行如下命令行即可: pip install opencv-python 如果你还想使用Ope ...
- Python3学习笔记(urllib模块的使用)转http://www.cnblogs.com/Lands-ljk/p/5447127.html
Python3学习笔记(urllib模块的使用) 1.基本方法 urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, ...
- Python3学习笔记 - 准备环境
前言 最近乘着项目不忙想赶一波时髦学习一下Python3.由于正好学习了Docker,并深深迷上了Docker,所以必须趁热打铁的用它来创建我们的Python3的开发测试环境.Python3的中文教程 ...
- python3学习笔记(7)_listComprehensions-列表生成式
#python3 学习笔记17/07/11 # !/usr/bin/env python3 # -*- conding:utf-8 -*- #通过列表生成式可以生成格式各样的list,这种list 一 ...
- python3学习笔记(6)_iteration
#python3 学习笔记17/07/10 # !/usr/bin/env python3 # -*- coding:utf-8 -*- #类似 其他语言的for循环,但是比for抽象程度更高 # f ...
- python3学习笔记(5)_slice
#python3 学习笔记17/07/10 # !/usr/bin/env python3 # -*- coding:utf-8 -*- #切片slice 大大简化 对于指定索引的操作 fruits ...
- Python3学习笔记01-环境安装和运行环境
最近在学习Python3,想写一些自己的学习笔记.方便自己以后看,主要学习的资料来自菜鸟教程的Python3教程和廖雪峰官方网站的Python教程. 1.下载 1)打开https://www.pyth ...
随机推荐
- 计划任务_crontab
1. crontab原理和使用 Cron 实际上是两个独立的程序.Cron damon, 或者叫做cron ,crond 它是伴随系统一起启动的常驻程序 来检查是否cron 在系统上运行, 用ps 命 ...
- python--pip出错
问题: 1.使用pip install时,出现Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None) ...
- .net core跨平台的文件路径
windows下路径为:"xxxx\\yyyy" linux路径下为:"xxxx/yyyy" 用Path.Combine("xxxx",&q ...
- Hdu-1098解题报告
Hdu-1098解题报告 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1098 题意:已知存在一个等式f(x)=5*x^13+13*x^5+k*a*x ...
- Running Median POJ - 3784 (对顶堆/优先队列 | 链表)
For this problem, you will write a program that reads in a sequence of 32-bit signed integers. After ...
- Logstash读取Kafka数据写入HDFS详解
强大的功能,丰富的插件,让logstash在数据处理的行列中出类拔萃 通常日志数据除了要入ES提供实时展示和简单统计外,还需要写入大数据集群来提供更为深入的逻辑处理,前边几篇ELK的文章介绍过利用lo ...
- linux下安装node踩坑总结
1.在node官网下载linux二进制文件(确定文件的类型)本文以二进制文件为例 2.放入linux的对应目录下之后: tar -xvf node-v10.15.3-linux-x64.tar.xz ...
- 【Java并发核心九】并发集合框架
1.List接口:ArrayList 和 Vector ArrayList不是线程安全的,Vector是线程安全的,Vector有一个子类,可实现后进先出(LIFO)的对象堆栈(LinkedList ...
- Python爬虫:更加优雅的执行JavaScript(PyV8)
https://www.jianshu.com/p/c534d6eb881a?utm_source=oschina-app
- C#如何使用REST接口读写数据
原网站:http://www.codeproject.com/Tips/497123/How-to-make-REST-requests-with-Csharp 一个类,我们拷贝下来直接调用就行: 以 ...