opencv安装介绍以及基本图像处理详解

文章目录

  • 一、什么是OpenCV ?
  • 二. OpenCV 安装
    • 1. 下载地址
    • 2.安装命令:pip install opencv-python
  • 三、图像基础
    • 1. 基本概念
    • 2. 坐标系
    • 3. 基本操作(彩色图片)
      • (1)读取图片:cv2.imread( )
      • (2)获取图片的形状:img.shape
      • (3)获取图片的大小:img.size
      • (4)显示图片:cv2.imshow( )
      • (5)等待:cv2.waitKey(0)
      • (6)关闭:cv2.destroyAllWindows()
    • 4. 基本操作(灰度图片)
    • 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. 下载地址

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()

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ThreadLocal(3):ThreadLocal的内部结构

下面介绍ThreadLocal的内部结构,探究它能够实现线程数据隔离的原理。 1 常见的误解 ​如果我们不去看源代码的话,可能会猜测ThreadLocal是这样子设计的:每个ThreadLocal都创建一个Map,然后用线程作为Map的key,要存储…

this的指向问题总结

this一般会出现在函数里面,但是一般情况下只有在函数被调用执行时,才能确定this指向哪个对象。一般情况下this是指调用函数的对象。 1.在全局作用域下或者普通函数中this的指向一般都是window对象 window.fn(),普通函…

前端实现鼠标点击箭头旋转180度

效果&#xff1a; <div click"showChecklist" class"checkCLass cur pr-20px pl-20px pa flex ai-center"><span>{{ checkListStatus() }}</span><p class"trangle"></p></div> 下面是三角形状的样式 .tr…

qt对stl模型显示的封装

我一直都想把vtk显示这一块做成一个封装的静态lib&#xff0c;然后别的类只需要我暴露出的头文件和lib文件就可以了&#xff0c;这次我实现的是对一个放stl文件的文件夹下的stl文件做显示&#xff0c;用的是vs2017qt,实现的主要效果如下&#xff1a; 因为qt自身带的标题栏显示…

CAN_相关的测试用例+测试方法+测试工具使用+输出测试报告

测试类型: 第一:通信测试 第二:间接网络管理测试 第三:AUTOSAR网络管理测试 第四:诊断协议栈Diva测试 第五:诊断协议补充测试 第六:Bootloader测试 第七:网…

用html编写的招聘简历

用html编写的招聘简历 相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</tit…

架构师蓝图: 理解软件风格与模式

本文介绍了10种软件架构风格及其对应设计模式&#xff0c;梳理了各个风格的优缺点和适用场景&#xff0c;帮助读者在架构选项过程中能有的放矢&#xff0c;做出更适合业务场景的架构设计。原文: The Architect’s Blueprint: Understanding Software Styles and Patterns with …

onlyoffice document builder使用

office这个体系分为四个大教程 1、【document server文档服务器基础搭建】 2、【连接器(connector)或者jsApi调用操作office】-进阶 3、【document builder文档构造器使用】-进阶 4、【Conversion API(文档转化服务)】-进阶 如果需要连接器&#xff0c;可以查看&#xff1…

认识Redis:不只是缓存,还有这些厉害的功能!

在当今数据驱动的世界中&#xff0c;快速存取信息成为了技术发展的关键。而在众多存储解决方案中&#xff0c;Redis以其独特的魅力和强大的功能&#xff0c;成为了开发者们的宠儿。今天&#xff0c;就让我们一起来认识一下Redis。 一、Redis是什么&#xff0c;可以用来干什么&…

EasyRecovery易恢复中文破解版2024最新破解序列号

EasyRecovery易恢复是一款来自美国的数据恢复软件&#xff0c;已有35年&#xff08;或38年&#xff09;的历史。它支持不同存储介质的数据恢复&#xff0c;包括电脑系统硬盘、移动硬盘等&#xff0c;并针对不同的数据丢失原因提供了相应的恢复方案。 EasyRecovery易恢复是一款功…

【清关知识】毛里求斯的清关文件及清关手续

1、清关文件 1&#xff09;发票 海关发票&#xff08;3份&#xff09;、商业发票。所有货物随货发票必须为正本原始发票&#xff0c;所有进口商在办理清关提货手续时&#xff0c;首先必须向海关呈交商业登记号码&#xff0c;凭此登记号码才可向公司注册局登记。 2&#xff0…

【linux】体系结构和os管理

冯诺依曼体系结构 输入单元&#xff1a;包括键盘, 鼠标&#xff0c;扫描仪, 写板等 中央处理器(CPU)&#xff1a;含有运算器和控制器等 输出单元&#xff1a;显示器&#xff0c;打印机等 这里的存储器指的是内存 三者是相互连接的&#xff0c;设备之间会进行数据的来回拷贝&am…

以理论89、上机100分成绩终于通过了OceanBase OBCP的考试

OceanBase OBCP的考试分为理论考试和上机考试&#xff0c;跟OBCA认证考试比较来说&#xff0c;难度上升了一个很多大的层次。OBCA我是好几年前考的了&#xff0c;现在因为公司再去o&#xff0c;准备进OceanBase&#xff0c;所以必须快速考出OBCP证书&#xff0c;本来想着直接背…

【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),流程描述篇

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握。…

【Java】图解 JVM 垃圾回收(二):垃圾收集器、Full GC

图解 JVM 垃圾回收&#xff08;二&#xff09; 1.垃圾收集器1.1 内存分配与回收策略1.2 Serial 收集器1.3 Parallel Scavenge 收集器1.4 ParNew 收集器1.5 CMS 收集器1.6 G1 收集器 2.Full GC 的触发条件 1.垃圾收集器 Java 虚拟机提供了多种垃圾回收器&#xff0c;每种回收器…

postgresql 文件结构(一) 数据库、表对应的文件

1、问题 甲方要求提供数据库数据量大小&#xff0c;由于各个业务数据库共用一个postgres&#xff0c;因此想把每个数据库占用的空间都统计一下。 2、查找物理存储文件目录 如下图所示&#xff0c;可以查询表、库的物理存储文件名称 -- 查询表对应的文件 select oid,relname…

c编译器学习02:chibicc文档翻译

目的 先粗略地看一遍作者的书籍。 原文档地址 https://www.sigbus.info/compilerbook# “低レイヤを知りたい人のためのCコンパイラ作成入門” 为想了解底层的人准备的C编译器制作入门 Rui Ueyama ruiucs.stanford.edu 2020-03-16 作者简介 https://www.sigbus.info/ 植山…

【前端素材】几款实用的后台管理系统html模板(附带源码)

一、需求分析 后台管理系统是一种用于管理网站、应用程序或系统的工具&#xff0c;它通常作为一个独立的后台界面存在&#xff0c;供管理员或特定用户使用。下面详细分析后台管理系统的定义和功能&#xff1a; 1. 定义 后台管理系统是一个用于管理和控制网站、应用程序或系统…

flink多流操作(connect cogroup union broadcast)

flink多流操作 1 分流操作2 connect连接操作2.1 connect 连接&#xff08;DataStream,DataStream→ConnectedStreams)2.2 coMap&#xff08;ConnectedStreams → DataStream&#xff09;2.3 coFlatMap&#xff08;ConnectedStreams → DataStream&#xff09; 3 union操作3.1 u…

一文搞懂LDO !

7.LDO 1.原理 通过运放调节P-MOS的输出 低压差&#xff1a; 输出压降比较低&#xff0c;例如输入3.3V&#xff0c;输出可以达到3.2V。 线性&#xff1a; LDO内部的MOS管工作于线性状态。&#xff08;可变电阻区&#xff09; 稳压器&#xff1a; 说明了LDO的用途是用来给电…