【OpenCV】基础知识

news2024/12/27 16:09:54

目录

  • 0 前言
  • 1 什么是OpenCV?
    • 1.1 OpenCV
    • 1.2 OpenCV-Python
  • 2 在线英文文档
  • 3 新建项目
  • 4 图像读取
    • 4.1 读入图像
    • 4.2 显示图像
    • 4.3 保存图像
    • 4.4 Demo
    • 4.4.1 Demo1
    • 4.4.2 Demo2
    • 4.4.3 Demo3
  • 5 ROI区域

0 前言

使用软件:Anaconda + Pycharm + VScode
OpenCV环境:

  • python=3.10
  • cv2.version = 4.8.0
  • numpy.version = 1.22.3

人们认为计算机科学是天才的艺术,但是实际情况相反,只是许多人在其它人基础上做一些东西,就像一面由石子垒成的墙。——高德纳

OpenCV是一个广泛应用于计算机视觉领域的开源工具库,为开发者提供了丰富的图像处理和计算机视觉算法。本文将介绍OpenCV的功能和应用领域,并探讨它在实践中的重要性和前景。


1 什么是OpenCV?

OpenCV(开源计算机视觉库)是在 BSD 许可下发布的,因此它可以免费用于学术和商业用途。
它具有 C++,Python 和 Java 接口,支持 Windows,Linux,Mac OS,iOS 和 Android。
OpenCV 专为提高计算效率而设计,专注于实时应用。该库以优化的 C/C++ 编写,可以利用多核处理。
通过 OpenCL 启用,它可以利用底层异构计算平台的硬件加速。

OpenCV 在全球范围内采用,拥有超过 4.7 万用户社区,估计下载量超过 1400 万。
用途范围从交互式艺术,到地雷检查,网上拼接地图或高级机器人。

1.1 OpenCV

  • OpenCV 于 1999 年由 Gary Bradsky 在英特尔创立,第一个版本于 2000 年问世。Vadim Pisarevsky 加入了 Gary Bradsky,负责管理英特尔的俄罗斯软件 OpenCV 团队。2005 年,OpenCV 被用于 Stanley ,这辆车赢得了 2005 年美国穿越沙漠 DARPA 机器人挑战大赛。后来,在 Willow Garage 的支持下,在 Gary Bradsky 和 Vadim Pisarevsky 主导下,OpenCV 项目的开发工作变得活跃起来。OpenCV 现在支持与计算机视觉和机器学习相关的众多算法,并且每天都在拓展中。

  • OpenCV 支持各种编程语言,如 C++,Python,Java 等,可在不同的平台上使用,包括 Windows,Linux,OS X,Android 和 iOS。基于 CUDA 和 OpenCL 的高速 GPU 操作接口也在积极开发中。

  • OpenCV-Python 是 OpenCV 的 Python API,结合了 OpenCV C++ API 和 Python 语言的最佳特性。

1.2 OpenCV-Python

  • OpenCV-Python 是一个 Python 绑定库,旨在解决计算机视觉问题。

  • Python 是一种由 Guido van Rossum 开发的通用编程语言,它很快就变得非常流行,主要是因为它的简单性和代码可读性。它使程序员能够用更少的代码表达思想,而不会降低可读性。

  • 与 C/C++ 这类语言相比,Python 的速度更慢。好在,可以使用 C/C++ 轻松的拓展 Python ,我们可以在 C/C++ 中编写计算密集型代码,并用 Python 来封装。这给我们带来了两个好处:首先,代码像原始的 C/C++ 代码一样快(因为后台实际上就是 C/C++ 代码在工作),其次,在 Python 中编写代码比在 C/C++ 中更容易。OpenCV-Python 就是 OpenCV C++ 的 Python 封装。

  • OpenCV-Python 使用了 Numpy,这是一个有着 MATLAB 风格语法,高度优化的用于数值计算的库。所有 OpenCV 数组结构都与 Numpy 数组进行转换。这也使得与使用 Numpy 的其他库(如 SciPy 和 Matplotlib)集成更容易。


2 在线英文文档

https://opencv.apachecn.org/

3 新建项目

新建项目,路径不要出现中文
在这里插入图片描述

文件夹名称
在这里插入图片描述
添加解释器,添加本地解释器

这样就创建好了一个文件夹,然后像我这样一级一级向下分,细分文件夹
在这里插入图片描述

在这里插入图片描述

4 图像读取

4.1 读入图像

retval = cv2.imread(文件名, [显示控制参数])

范例:

cxk = cv2.imread("photo\\cxk.bmp")#导入图片

4.2 显示图像

None = cv2.imshow(窗口名, 图像名)

范例:

cv2.imshow('cxk',cxk)

4.3 保存图像

retval = cv2.imwrite(文件地址, 文件名)

范例:

cv2.imwrite('D:\\test.jpg',cxk)

4.4 Demo

4.4.1 Demo1

import cv2#opencv读取的格式是BGR
import numpy as np

cxk = cv2.imread("photo\\cxk.bmp")#导入图片

cv2.imshow('cxk',cxk)#等待时间,毫秒级,0表示任意键终止

cv2.waitKey()#按键终止
cv2.destoryAllWindows()

4.4.2 Demo2

#2023年11月26日15:47:19
import cv2
#绝对路径
img = cv2.imread("F:\\PycharmProjects\\OpenCV\\A1_Photo_Input\\photo\\tsy.jpg", cv2.IMREAD_UNCHANGED)    #导入图片
cv2.imshow("original", img)     #显示图片,名称叫demo

print( img[100,100] )    #读取BGR格式数值
img[150:240, 250:350] = [90, 25, 255]    #[100:200, 100:200] 这个范围内的像素 修改成白色
cv2.imshow("result", img)

cv2.waitKey(0)
cv2.destroyAllWindows()

4.4.3 Demo3

图像属性

#2023年12月8日11:59:50
from cv2 import cv2
import numpy as np
#获取图像属性

img = cv2.imread("photo\\tsy.jpg", cv2.IMREAD_UNCHANGED) #这是一个彩色图像
print(img.shape)    #计算图像的属性,输出是(1441, 960, 3)

print(img.size)     #4150080 = 1441*960*3
print(img.dtype)    #图像的数据类型 输出是uint8

5 ROI区域

import cv2
import numpy as np

a=cv2.imread("H:\\PycharmProjects\\OpenCV\\A1_Photo\\photo\\goutou.png",cv2.IMREAD_UNCHANGED)#这是一个彩色图像
b=cv2.imread("H:\\PycharmProjects\\OpenCV\\A1_Photo\\photo\\zxd.png",cv2.IMREAD_UNCHANGED)
cv2.imshow("original",a)#显示原始图像

face = np.ones((100,100,3))#生成一个感兴趣区域ROI,100行100列三个通道
face = a[0:290,0:290]
b[0+65:290+65,0+40:290+40] = face
cv2.imshow("face",b)#显示复制后的图像

cv2.waitKey(0)
cv2.destroyAllWindows()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vulmap No module named ‘thirdparty.urllib3.packages.six.moves‘

问题 今天安装vulmap是发现无论如何安装不了,pip那边明明已经安装好了 后来发现vulmap脚本也有这个东西,后面想了下 最后分析却发现不是pip那边,是vulmap的脚本的’thirdparty.urllib3.packages.six.moves’模块与我这边的pip有些模块冲突了…

“MongoDB AI应用计划 (MAAP)”正式全面推出

助企业弥合AI应用缺口,抢占创新发展制高点 在MongoDB,无论应用场景如何,出发点都是帮助客户解决应用和数据的问题。基于客户沟通与反馈,大多数企业和机构对生成式AI很感兴趣,但不确定如何将概念转化为生产力&#xff…

VSCode的markdown设置目录toc无法显示

如图我设置了目录的语法,但是显示出来并不是我想要的目录格式 想要显示目录,首先需要下载Markdown All in One插件 然后CtrlShiftV,就可以看到目录了

【C++题解】1053 - 求100+97+……+4+1的值。

欢迎关注本专栏《C从零基础到信奥赛入门级(CSP-J)》 问题:1053 - 求10097……41的值。 类型:简单循环 题目描述: 求 10097⋯41 的值。 输入: 无。 输出: 输出一行,即求到的和…

EmguCV学习笔记 C# 6.3 轮廓外接多边形

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

C++ JAVA源码 HMAC计算 openssl 消息认证码计算 https消息防篡改 通信安全

签名和验签 把所有消息按顺序合并成一条信息,对这个信息用密钥进行签名。 签名信息通过 HTTP 头 Sign 传递,没有携带签名或者签名验证不通过的请求,将会被认为异常请求,并返回相应 code 码。 校验方法:根据 http请求…

【嵌入式裸机开发】智能家居入门7:最新ONENET,MQTT协议接入,最全最新(微信小程序、MQTT协议、ONENET云平台、STM32)

智能家居入门7 前言一、ONENET云平台创建产品与设备二、STM32端连接服务器前的准备三、STM32端实现四、微信小程序端连接服务器前的准备五、微信小程序端实现六、最终测试 前言 本篇文章介绍最新ONENET云平台的MQTT协议接入方法,在STM32上实现数据上云与服务器下发…

影像组学与病理组学在鼻咽癌领域的最新研究进展|文献速递·24-08-23

小罗碎碎念 今天这期推文收纳了人工智能在鼻咽癌领域的最新研究进展,既涉及影像组学也涉及病理组学。 在写这期推文的时候,刚好看到了国自然基金放榜的消息,在这里也祝各位关注小罗的老师能如愿上榜!! 正在积极备战…

LangChain框架深度解析:对Chains组件的全方位探索与实战案例

文章目录 前言一、Chains二、LLMChain⭐1.LLMChain介绍2.LLMChain案例 三、SimpleSequentialChain⭐1.SimpleSequentialChain介绍2.SimpleSequentialChain案例 四、SequentialChain⭐1.SequentialChain介绍2.SequentialChain案例 五、RouterChain⭐1.RouterChain介绍2.RouterCh…

ArcGIS空间自相关 (Global Moran‘s I)——探究人口空间格局的20年变迁

先了解什么是莫兰指数? 莫兰指数(Morans I)是一种用于衡量空间自相关性的统计量,即它可以帮助我们了解一个地理区域内的观测值是否彼此相关以及这种相关性的强度和方向。 白话版:一句话就是判断数据在空间上有没有自…

ChatGPT3.5/新手使用手册——在线使用详细操作步骤

成长路上不孤单😊【14后小学生一枚,C爱好者,持续分享所学,今日分享主题【ChatGPT新手使用手册】,需要欢迎收藏转发😊😊😊😊😊😊😊&…

学习笔记七:基于Jenkins+k8s+Git+DockerHub等技术链构建企业级DevOps容器云平台

基于Jenkinsk8sGitDockerHub等技术链构建企业级DevOps容器云平台 安装Jenkins在kubernetes中部署jenkins创建名称空间创建pv,上传pv.yaml创建pvc创建一个sa账号通过deployment部署jenkins更新资源清单文件把jenkins前端加上service,提供外部网络访问 配置Jenkins获取…

MQ的优缺点及适用场景

MQ的优缺点及适用场景 1、MQ的优点2、MQ的缺点 💖The Begin💖点点关注,收藏不迷路💖 消息队列(MQ)在软件开发中扮演重要角色,带来解耦、异步、削峰等好处。然而,MQ的引入也伴随着一些…

【Hot100】LeetCode—101. 对称二叉树

目录 1- 思路借助队列 2- 实现⭐101. 对称二叉树——题解思路 3- ACM 实现 原题连接&#xff1a;101. 对称二叉树 1- 思路 借助队列 1- 创建队列&#xff1a;Queue<TreeNode> queue&#xff0c;初始化加入 root.left 和 root.right2- 判断逻辑&#xff1a;while(!queu…

为什么要进行微隔离

在当今数字化时代&#xff0c;随着云计算、大数据、物联网等技术的飞速发展&#xff0c;企业网络环境日益复杂&#xff0c;传统的网络边界防护策略面临着前所未有的挑战。传统的防火墙、入侵检测系统等安全设备虽然在一定程度上能够抵御外部威胁&#xff0c;但在内部网络的安全…

回归分析系列16— 多层次模型

119 多层次模型 19.1 简介 多层次模型&#xff08;也称为层次线性模型或混合效应模型&#xff09;在处理具有嵌套结构的数据时非常有用。例如&#xff0c;在教育数据中&#xff0c;学生嵌套在班级中&#xff0c;班级嵌套在学校中。多层次模型允许我们同时建模这些不同层次的影…

政安晨【零基础玩转各类开源AI项目】基于本地Linux Ubuntu系统部署及应用强大的开源AI音乐生成工具:AudioCraft

目录 简介 部署 下载项目 创建虚拟环境 激活虚拟环境 安装依赖 启动 成功 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 简介 A…

c++每日练习记录4-(递归思想)

题解1迭代&#xff1a; 利用利用两个新的指针&#xff0c;一个用于保存输出的初始节点&#xff0c;另外一个用于地址的迭代指向。 ListNode *mergeTwoLists(ListNode *list1, ListNode *list2){ListNode *list_node new ListNode(0);ListNode *list_node1 list_node;while (l…

看图学sql之sql 中的UNION 和union all

UNION 用于合并两个或者多个 SELECT 语句的结果集 语法&#xff1a; SELECT column1, column2 ... FROM table1, table2 [WHERE condition1]UNION / UNION ALLSELECT column1, column2 ... FROM table1, table2 [WHERE condition2] 数据分析社区直达 免费数据分析资料下载。…

C#使用 ModeBusTCP读取汇川Easy521PLC

Modbus TCP是一种基于以太网TCP/IP的Modbus协议变种&#xff0c;它允许Modbus协议在以太网网络上运行&#xff0c;使得设备之间可以通过IP网络交换数据。Modbus由MODICON公司于1979年开发&#xff0c;是一种工业现场总线协议标准&#xff0c;广泛应用于工业自动化领域。 #regio…