Opencv-Python学习笔记(一)

简介:
opencv computer vision with python

在闲暇时间里找到这本关于opencv的书,边看边学,在这也是记录下在这学习过程中的一些笔记,方便以后真正用到时查阅。

教程可查阅:opencv-python tutorial

opencv-python tutorial.png

windows环境下安装opencv

1、windows系统是win7+64位, python版本号是3.5,因此需要找到与其相对应的opencv安装版本

可以在这里找到各种版本下的安装文件: opencv_python-3.1.0-cp35-cp35m-win_amd64.whl

2、下载好opencv的安装文件后,通过pip install opencv_python-3.1.0-cp35-cp35m-win_amd64.whl进行安装

install opencv

3、等第二步安装完成后,查看是否安装成功

opencv-version

通过查看版本号可知opencv-python已安装成功。

opencv 简单入门

1、读取图片 imread(path)

Use the function cv2.imread() to read an image. The image should be in the working directory or a full path of image should be given.
Second argument is a flag which specifies the way image should be read.
cv2.IMREAD_COLOR : Loads a color image. Any transparency of image will be neglected. It is the default flag.
cv2.IMREAD_GRAYSCALE : Loads image in grayscale mode
cv2.IMREAD_UNCHANGED : Loads image as such including alpha channel
Instead of these three flags, you can simply pass integers 1, 0 or -1 respectively.

OpenCV目前支持读取bmp、jpg、png、tiff等常用格式。

通过上面的英文我们知道opencv提供了一个imread方法让我们去读取图片,该方法有两个参数:第一个参数是我们所要读取图片的路径, 第二个参数是图片读取的方式,如IMREAD_COLOR 表示加载彩色图片(默认),IMREAD_GRAYSCALE以黑白方式加载图片,IMREAD_UNCHANGED原图加载含alpha channel信息。其中第二个参数的这三个值也可用1,0,-1来表示,方便我们在编程时的输入。

阿尔法通道(Alpha Channel)是指一张图片的透明和半透明度.

import cv2

#采取默认方式读取图片,即cv2.imread(path, 1)
img = cv2.imreda('img800.jpg')

#黑白方式读取图片
img1 = cv2.imread('img800', 0)

imread-imshow
2、图片显示 imshow()

opencv提供了cv2.imshow()来显示图片,该方法有两个参数,第一个为窗口名,第二个为所要显示的图片。

Use the function cv2.imshow() to display an image in a window. The window automatically fits to the image size.
First argument is a window name which is a string. second argument is our image. You can create as many windows as you wish, but with different window names.

直接上代码:
第一种方法:

import cv2

img1 = cv2.imread('img800.jpg', 0)
#取名图片窗口名为gray,显示图片是img1
cv2.imshow('gray', img1)
#添cv2.waitKey(0),在IDLE中执行窗口直接无响应。在命令行中执行的话,则是一闪而过
cv2.waitKey(0)
#释放窗口,简单暴力释放掉所有的窗口
cv2.destroyAllWindows()

其中cv2.waitKey()cv2.destroyAllWindows()方法在上面程序中有解释,官方解释如下:

cv2.waitKey() is a keyboard binding function. Its argument is the time in milliseconds. The function waits for specified milliseconds for any keyboard event. If you press any key in that time, the program continues. If 0 is passed, it waits indefinitely for a key stroke. It can also be set to detect specific key strokes like, if key a is pressed etc which we will discuss below.
cv2.destroyAllWindows() simply destroys all the windows we created. If you want to destroy any specific window, use the function cv2.destroyWindow() where you pass the exact window name as the argument.

第二种方法:
先通过cv2.namedWindow()对图片窗口先进行命名并进行其他设置,如可改变窗口大小。
代码如下:

import cv2 

img2 = cv2.imread('img800.jpg')
#通过设置第二个参数使得图片窗口可调节大小,默认是不可调的(cv2.WINDOW_AUTOSIZE)
cv2.namedWindow('color', cv2.WINDOW_NORMAL)
cv2.imshow('color',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

There is a special case where you can already create a window and load image to it later. In that case, you can specify whether window is resizable or not. It is done with the functioncv2.namedWindow(). By default, the flag is cv2.WINDOW_AUTOSIZE. But if you specify flag to be cv2.WINDOW_NORMAL, you can resize window. It will be helpful when image is too large in dimension and adding track bar to windows.

cv2.WINDOW_AUTOSIZE:根据原图大小进行展示
cv2.WINDOW_NORMAL:图片窗口可调节大小

namedWindow()
3、保存图片 cv2.imwrite()

opencv提供了cv2.imwrite()方法保存图片

Use the function cv2.imwrite() to save an image.
First argument is the file name, second argument is the image you want to save.

#保存图片到当前工作目录
cv2.imwrite('saveimg.png', img1)

imwrite()的第三个参数设置


##对于JPEG,其表示的是图像的质量,用0-100的整数表示,默认为95。 
##注意,cv2.IMWRITE_JPEG_QUALITY类型为Long,必须转换成int。
cv2.imwrite('saveimg11.jpg', img1, [int(cv2.IMWRITE_JPEG_QUALITY), 5])

##对于png图片,第三个参数表示的是压缩级别。
##cv2.IMWRITE_PNG_COMPRESSION,从0到9,压缩级别越高,图像尺寸越小。默认级别为3
cv2.imwrite('saveimg11.png', img1, [int(cv2.IMWRITE_JPEG_QUALITY), 5])
save image

例子1:根据用户在键盘所敲下的不同按键对图片进行处理,如ESC退出,按下‘s’时保存图片并退出。

import numpy as np
import cv2

img = cv2.imread('img800.jpg',0)
cv2.imshow('image',img)
#本台机器系统是64位 k = cv2.waitKey(0) & 0xF
#若是32位系统请用 k = cv2.waitKey(0)
k = cv2.waitKey(0) & 0xFF
if k == 27:         # 按下ESC退出
    cv2.destroyAllWindows()
elif k == ord('s'): # 按下's'保存图片并退出
    cv2.imwrite('savegray.png',img)
    cv2.destroyAllWindows()

例子2:通过opencv来读取图片,用matplotlib来显示图片,充分利用其plot的诸多特性。

import numpy as np
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('img800.jpg',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([]) 
plt.show()

因为opencv与matplotlib对图片的读取值顺序等的差异,在二者互相交替使用时需要注意一些细节,更多问题讨论大家可以参考 some problem when you try to load color image in OpenCV and display it in Matplotlib

Color image loaded by OpenCV is in BGR mode. But Matplotlib displays in RGB mode. So color images will not be displayed correctly in Matplotlib if image is read with OpenCV.

show Image by matplotlib.png


链接:https://www.jianshu.com/p/7fcfc6253c81

目录
相关文章
|
1月前
|
计算机视觉
Opencv学习笔记(十二):图片腐蚀和膨胀操作
这篇文章介绍了图像腐蚀和膨胀的原理、作用以及使用OpenCV实现这些操作的代码示例,并深入解析了开运算和闭运算的概念及其在图像形态学处理中的应用。
109 1
Opencv学习笔记(十二):图片腐蚀和膨胀操作
|
1月前
|
编解码 数据安全/隐私保护 计算机视觉
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
如何使用OpenCV进行同步和异步操作来打开海康摄像头,并提供了相关的代码示例。
84 1
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
|
1月前
|
算法 计算机视觉
Opencv学习笔记(六):cv2.resize函数的介绍
这篇文章介绍了OpenCV库中cv2.resize函数的使用方法,包括其参数、插值方式选择以及实际代码示例。
245 1
Opencv学习笔记(六):cv2.resize函数的介绍
|
1月前
|
计算机视觉
Opencv学习笔记(八):如何通过cv2读取视频和摄像头来进行人脸检测(jetson nano)
如何使用OpenCV库通过cv2模块读取视频和摄像头进行人脸检测,并提供了相应的代码示例。
82 1
|
1月前
|
计算机视觉
Opencv学习笔记(五):cv2.putText()和cv2.rectangle()详细理解
这篇文章详细介绍了OpenCV库中的`cv2.putText()`和`cv2.rectangle()`函数的使用方法,并通过一个实战例子展示了如何使用这些函数在图像上绘制文字和矩形框。
136 0
Opencv学习笔记(五):cv2.putText()和cv2.rectangle()详细理解
|
1月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
334 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
1月前
|
编解码 计算机视觉 Python
Opencv学习笔记(九):通过CV2将摄像头视频流保存为视频文件
使用OpenCV库通过CV2将摄像头视频流保存为视频文件,包括定义视频编码格式、设置保存路径、通过write写入视频文件,并提供了相应的Python代码示例。
124 0
|
1月前
|
缓存 并行计算 Ubuntu
Jetson 学习笔记(十一):jetson agx xavier 源码编译ffmpeg(3.4.1)和opencv(3.4.0)
本文是关于在Jetson AGX Xavier上编译FFmpeg(3.4.1)和OpenCV(3.4.0)的详细教程,包括编译需求、步骤、测试和可能遇到的问题及其解决方案。还提供了Jetson AGX Xavier编译CUDA版本的OpenCV 4.5.0的相关信息。
62 4
Jetson 学习笔记(十一):jetson agx xavier 源码编译ffmpeg(3.4.1)和opencv(3.4.0)
|
1月前
|
网络协议 Java Linux
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
本文介绍了PyAV库,它是FFmpeg的Python绑定,提供了底层库的全部功能和控制。文章详细讲解了PyAV的安装过程,包括在Windows、Linux和ARM平台上的安装步骤,以及安装中可能遇到的错误和解决方法。此外,还解释了时间戳的概念,包括RTP、NTP、PTS和DTS,并提供了Python代码示例,展示如何获取RTSP流中的各种时间戳。最后,文章还提供了一些附录,包括Python通过NTP同步获取时间的方法和使用PyAV访问网络视频流的技巧。
197 4
PyAV学习笔记(一):PyAV简介、安装、基础操作、python获取RTSP(海康)的各种时间戳(rtp、dts、pts)
|
1月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
136 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输