最新版opencv4.9安装介绍,基本图像处理详解

文章目录

一、什么是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. 下载地址

https://opencv.org/releases/

最新版目前是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()

相关推荐
小技与小术1 分钟前
数据结构之树与二叉树
开发语言·数据结构·python
hummhumm28 分钟前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
deephub29 分钟前
优化注意力层提升 Transformer 模型效率:通过改进注意力机制降低机器学习成本
人工智能·深度学习·transformer·大语言模型·注意力机制
杜小满32 分钟前
周志华深度森林deep forest(deep-forest)最新可安装教程,仅需在pycharm中完成,超简单安装教程
python·随机森林·pycharm·集成学习
搏博40 分钟前
神经网络问题之二:梯度爆炸(Gradient Explosion)
人工智能·深度学习·神经网络
KGback1 小时前
【论文解析】HAQ: Hardware-Aware Automated Quantization With Mixed Precision
人工智能
电子手信1 小时前
知识中台在多语言客户中的应用
大数据·人工智能·自然语言处理·数据挖掘·知识图谱
不高明的骗子1 小时前
【深度学习之一】2024最新pytorch+cuda+cudnn下载安装搭建开发环境
人工智能·pytorch·深度学习·cuda
Chef_Chen1 小时前
从0开始学习机器学习--Day33--机器学习阶段总结
人工智能·学习·机器学习
搏博1 小时前
神经网络问题之:梯度不稳定
人工智能·深度学习·神经网络