文章目录
- [一、什么是OpenCV ?](#一、什么是OpenCV ?)
- [二. OpenCV 安装](#二. OpenCV 安装)
-
- [1. 下载地址](#1. 下载地址)
- [2.安装命令:pip install opencv-python](#2.安装命令:pip install opencv-python)
- 三、图像基础
-
- [1. 基本概念](#1. 基本概念)
- [2. 坐标系](#2. 坐标系)
- [3. 基本操作(彩色图片)](#3. 基本操作(彩色图片))
-
- [(1)读取图片:cv2.imread( )](#(1)读取图片:cv2.imread( ))
- (2)获取图片的形状:img.shape
- (3)获取图片的大小:img.size
- [(4)显示图片:cv2.imshow( )](#(4)显示图片:cv2.imshow( ))
- (5)等待:cv2.waitKey(0)
- (6)关闭:cv2.destroyAllWindows()
- [4. 基本操作(灰度图片)](#4. 基本操作(灰度图片))
- [5. BGR 顺序](#5. BGR 顺序)
一、什么是OpenCV ?
OpenCV的全称是:Open Source Computer Vision Library
OpenCV是Intel开源计算机视觉库。它由一系列 C 函数和少量 C++ 类构成,,可以运行在Linux、Windows、Android和Mac OS操作系统上。实现了图像处理和计算机视觉方面的很多通用算法。
优点:
1、 OpenCV 对非商业应用和商业应用都是免费的;
2、 开源的;
3、 可以应用于工程实践中;
缺点:
相对于Matlab而言,OpenCV基于C语言开发,编程复杂,开发周期较长。
可以看出,OpenCV的优缺点正好与Matlab的优缺点相反,两者各有所长,根据不同的要求选择不同的编程环境。
应用领域:
1、人机互动 2、物体识别 3、图象分割 4、人脸识别 5、动作识别 6、运动跟踪 7、机器人 8、运动分析 9、机器视觉 10、结构分析 11、汽车安全驾驶
为什么有OpenCV?
计算机视觉市场巨大而且持续增长,且这方面没有标准API,目前的计算机视觉软件大概有以下三种:
1.研究代码(慢,不稳定,独立并与其他库不兼容)
2.耗费很高的商业化工具(比如Halcon, MATLAB+Simulink)
3.依赖硬件的一些特别的解决方案(比如视频监控,制造控制系统,医疗设备)
这是目前的现状。而标准的API将简化计算机视觉程序和解决方案的开发。OpenCV致力于成为这样的标准API。
二. OpenCV 安装
1. 下载地址
最新版目前是4.9.0 感兴趣的可以看下源码source
官方文档:https://docs.opencv.org/4.x/d9/df8/tutorial_root.html
2.安装命令:pip install opencv-python
检查下opencv是否安装成功,进入python环境,导入cv2,如果不报错就是安装成功
查看opencv版本
三、图像基础
1. 基本概念
(1)像素:计算机屏幕上所能显示的最小单位。用来表示图像的单位。
(2)RGB,R : Red,G : Green,B : Blue,每个的范围是0~255。
一张图片是由无数个像素组成的
2. 坐标系
这个logo像素是:18 X 20 = 360 pixels
坐标系的原点(0,0)在左上角,每一个点的坐标是:
(height, width, channel)。
channel就是颜色数量,比如RGB,channel就是3
3. 基本操作(彩色图片)
(1)读取图片:cv2.imread( )
我们先看看图片的样子
image = cv2.imread('image/123.png') #注意,图片名称不能带中文。不然读取不到
image
得到的是个数组
#如果向要读取中文路径或中文文件名,需要转换下
#定义包含中文字符的图片路径
image_path = r"F:\virtualenvdata\ai\Scripts\pythonitems\myopencv\image\灰度.jpg"
#读取带有中文路径的图片
import numpy as np
image = cv2.imdecode(np.fromfile(image_path, dtype=np.uint8), -1)
#imdecode读取的是rgb,如果后续需要opencv处理的话,需要转换成bgr,转换后图片颜色会变化
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
image.shape
查看这张图片的RGB分别是多少呢?
#查看图片的RGB
#在opencv中,图片的排序是BGR
#查看图片中某个点的三原色数值
b,g,r = image[40,20]
如果只想取出三原色中的一种,可以根据下标获取
#取出三原色中的某一种色的数值,根据下标获取
b = image[40,20,0]
b
可以看到跟同时取是一致的
#重新给像素赋值,更换颜色
image[40,20] = (0,0,255)
可以看到赋值成功
(2)获取图片的形状:img.shape
返回一个 (rows, heights, channels)
(3)获取图片的大小:img.size
返回一个rowsheightschannels
(4)显示图片:cv2.imshow( )
(5)等待:cv2.waitKey(0)
(6)关闭:cv2.destroyAllWindows()
图像显示完之后,要记得关闭,不然一直占用内存
cv2.imshow('image',image)
#记得显示的时候,一定要等一下,不然会一闪而过
cv2.waitKey(0) 0 为参数,单位毫秒,表示间隔时间
waitKey(int delay)键盘绑定函数,共一个参数,表示等待毫秒数,将等待特定的几毫秒,看键盘是否有输入,
如果delay大于0,那么超过delayms后,如果没有按键,那么会返回-1,
如果按键那么会返回键盘值,返回值为ASCII值。
如果其参数为0,则表示无限期的等待键盘输入。
#关闭所有窗口
cv2.destroyAllWindows()
显示的很大,而且不能缩小
4. 基本操作(灰度图片)
(1)读取图片:cv2.imread( img, cv2.IMREAD_GRAYSCALE ) #灰度读取,一定要加上 cv2.IMREAD_GRAYSCALE 这个参数
先看下图片
#读取灰度图片
image = cv2.imread('image/huidu.jpg',cv2.IMREAD_GRAYSCALE)
image
(2)获取图片的形状:img.shape,返回一个(rows, heights)
image.shape
可以看到灰度图片不包含channel
(3)展示灰度图片
#显示灰度图片
cv2.imshow("hui",image)
cv2.waitKey(0)
cv2.destroyAllWindows()
5. BGR 顺序
每个像素点由BGR三种颜色组成
#BGR顺序
img_logo = cv2.imread('image/logo.png')
#获取整张图片的BGR
b,g,r = cv2.split(img_logo)
#生成新图片
image_new = cv2.merge([r,g,b])
image_new
#展示
import matplotlib.pyplot as plt
plt.subplot(121)
plt.imshow(img_logo)
plt.subplot(122)
plt.imshow(image_new)
plt.show()
使用opencv展示
cv2.imshow('bgr_image',img_logo)
cv2.imshow('rgb_image',image_new)
cv2.waitKey(0)
cv2.destroyAllWindows()