我在Vscode学OpenCV 初步接触

news2024/12/26 10:59:29

OpenCV是一个开源的计算机视觉库,可以处理图像和视频数据。它包含了超过2500个优化过的算法,用于对图像和视频进行处理,包括目标识别、面部识别、运动跟踪、立体视觉等。OpenCV支持多种编程语言,包括C++、Python、Java等,可以在Windows、Linux、Mac OS X、Android等多个平台上使用。

图像

图像和视频数是指数字图像和数字视频中包含的像素或帧数。在数字图像中,图像数指的是图像中包含的像素数量,通常用宽度和高度的乘积来表示。在数字视频中,视频数指的是视频中包含的帧数,即视频中连续的静止图像序列数量。图像和视频数是指数字图像和数字视频中包含的像素或帧数。在数字图像中,图像数指的是图像中包含的像素数量,通常用宽度和高度的乘积来表示。在数字视频中,视频数指的是视频中包含的帧数,即视频中连续的静止图像序列数量。

我在Vscode学OpenCV

    • 图像
  • 如果遇到了cv2无法有智能提示的功能
  • 一、图像基本操作
    • 1.1 读取图像
      • 1.1.1 演示:
      • 1.1.2 支持
      • 1.1.3 flag
        • 部分解释:
          • 1.*.1_ 什么是alpha通道
          • 1.*.2_ 灰度图后使用 print 语句打印读取的图像数据。
    • 1.2 显示图像
      • 1.2.1 imshow函数__在一个窗口内显示读取的图像。
      • 1.2.2 namedWindow__创建指定名称的窗口
      • 1.2.3 waitKey函数
        • 1.2.3.1 要实现交互,可以使用cv2.waitKey函数来等待键盘输入
      • 1.2.4 destroyWindow函数
      • 1.2.5 destroyAllWindows
    • 1.3 保存图像 cv2.imwrite()

pip install opencv-contrib-python 直接安装编译好的 OpenCV 贡献库

如果遇到了cv2无法有智能提示的功能

就把你下载cv2的路径下安装包cv2的pyd复制到你现在使用的Python解释器路径的文件下面

一、图像基本操作

导入所需要的库(使用 pip install 完整路径文件名完成安装)

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

1.1 读取图像

 img = cv2.imread(filename, flags=None)
  • img是返回值,其值是读取到的图像。如果未读取到图像,则返回“None”。
  • filename 表示要读取的图像的完整文件名。
  • flags 是读取标记。该标记用来控制读取文件的类型

在这里插入图片描述

1.1.1 演示:

使用的照片:
在这里插入图片描述

# 图像IO操作
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

# 1.读取图像

img = cv.imread("Pic/f2e919585490afd1bebd313257e7ad9.jpg")

# 2、显示图像
## 2.1 OpenCV中的方法
cv.imshow("THIS Pi", img)
cv.waitKey(0)
# 按照窗口显示的
cv.destroyAllWindows()

在这里插入图片描述

1.1.2 支持

在这里插入图片描述

在这里插入图片描述

1.1.3 flag

在这里插入图片描述
在这里插入图片描述
cv2.IMREAD_UNCHANGED和cv2.IMREAD_GRAYSCALE是OpenCV库中用于读取图像的两种不同的模式。

  • cv2.IMREAD_UNCHANGED:这个模式会读取图像的原始数据,包括alpha通道(如果存在的话)。也就是说,如果图像是彩色的,那么它会保持彩色,如果图像有alpha通道,那么alpha通道也会被保留。

  • cv2.IMREAD_GRAYSCALE:这个模式会将图像转换为灰度图像。也就是说,无论原始图像是彩色的还是带有alpha通道的,读取后的图像都会是灰度的。加粗样式

- IMREAD_UNCHANGED = -1:返回原始图像,包括alpha通道(如果存在)在内的所有信息,即原始图像。

- IMREAD_GRAYSCALE = 0:将图像转换为灰度图像。

- IMREAD_COLOR = 1:返回BGR顺序的彩色图像,忽略alpha通道。

- IMREAD_ANYDEPTH = 2:如果图像具有深度信息,保留这些信息(,则返回16/32位图像),否则将图像转换为8位。

- IMREAD_ANYCOLOR = 4:尝试以最可能的颜色格式读取图像。

- IMREAD_LOAD_GDAL = 8:使用GDAL驱动来读取图像。

- IMREAD_REDUCED_GRAYSCALE_2 = 16, IMREAD_REDUCED_GRAYSCALE_4 = 32, IMREAD_REDUCED_GRAYSCALE_8 = 64:将图像转换为单通道灰度图像,并减少图像的大小(分别减少1/21/41/8)。

- IMREAD_REDUCED_COLOR_2 = 17, IMREAD_REDUCED_COLOR_4 = 33, IMREAD_REDUCED_COLOR_8 = 65:转换图像为3通道BGR彩色图像,并减少图像的大小(分别减少1/21/41/8)。

- IMREAD_IGNORE_ORIENTATION = 128:忽略EXIF元数据中的定位信息,不旋转图像。

这些标志可以根据你的需求进行组合使用,例如,你可以同时使用IMREAD_GRAYSCALE和IMREAD_REDUCED_GRAYSCALE_2,这样OpenCV会读取灰度图像,并将其大小减少一半。
部分解释:
1.*.1_ 什么是alpha通道

Alpha通道是图像中的一个通道,它表示图像的透明度信息。在一个RGBA颜色模型中,R代表红色,G代表绿色,B代表蓝色,A代表Alpha,即透明度。
在这里插入图片描述

Alpha通道的值通常在0到255之间,其中0表示完全透明,255表示完全不透明。通过改变Alpha通道的值,我们可以改变图像的透明度。例如,如果我们将一个像素的Alpha值设置为127,那么这个像素将会是半透明的。

Alpha通道在图像处理中有很多应用,例如在合成两个图像时,我们可以通过调整Alpha通道的值来控制每个图像的可见度。

常见的色彩深度有:

  • 1位:二值图像,只有黑和白两种颜色。
  • 8位:灰度图像,可以表示256种不同的灰度级别。
  • 24位:真彩色图像,每个颜色通道(红、绿、蓝)使用8位,可以表示约1670万种颜色。
  • 32位:包含alpha通道的真彩色图像,每个颜色通道(红、绿、蓝和alpha)使用8位。

所以,如果你问的是像素可以表示的颜色数量,那么:

  • 1位色彩深度可以表示2种颜色。
  • 8位色彩深度可以表示256种颜色。
  • 24位色彩深度可以表示约1670万种颜色。
  • 32位色彩深度理论上可以表示约429亿种颜色,但实际上由于alpha通道表示的是透明度而非颜色,所以可表示的颜色数量仍然是约1670万种。

彩色深度标准通常有以下几种:

  • 8位色,每个像素所能显示的彩色数为2的8次方,即256种颜色。
  • 16位增强色,16位彩色,每个像素所能显示的彩色数为2的16次方,即65536种颜色。
  • 24位真彩色,每个像素所能显示的彩色数为24位,即2的24次方,约1680万种颜色。
  • 32位真彩色,即在24位真彩色图像的基础上再增加一个表示图像透明度信息的Alpha通道。
1.*.2_ 灰度图后使用 print 语句打印读取的图像数据。

输出图像的部分像素值

256个灰度等级,255代表全白,0表示全黑。
在这里插入图片描述
灰度图的显示的print
在这里插入图片描述
原格式的print
在这里插入图片描述

1.2 显示图像

在读取图像前判断图像文件是否存在,并在显示图像前判断图像是否存在

1.2.1 imshow函数__在一个窗口内显示读取的图像。

img = cv2.imshow( winname, mat )

winname 是窗口名称、mat 是要显示的图像。

cv2.imshow("THIS Pi", img)
cv2.imshow("THIS Pi", img)

如果是两个同名的,只会显示一个窗口

cv2.namedWindow("lesson")
cv2.imshow("THIS Pi", img)
cv2.imshow("lesson", img)  引用一个并不存在的窗口,并在其中显示指定图像

可以用cv2.imshow()来创建一个新窗口并显示图像。如果指定的窗口名称已存在,则会在该窗口中显示图像。如果指定的窗口名称不存在,则会创建一个新的窗口并显示图像。实际上,cv2.imshow()函数会完成窗口的创建和图像的显示两个步骤。

1.2.2 namedWindow__创建指定名称的窗口

 img = cv2.namedWindow( winname )

1.2.3 waitKey函数

cv2.waitKey( [delay] )

retval表示函数cv2.waitKey()的返回值。如果没有按键被按下,则返回-1;如果有按键被按下,则返回该按键的ASCII码。

delay表示等待键盘触发的时间,单位是毫秒。当该值设置为负数或零时,表示无限等待,即函数会一直等待键盘的触发。该值默认为0。
在这里插入图片描述

1.2.3.1 要实现交互,可以使用cv2.waitKey函数来等待键盘输入
import cv2

# 读取图像
image = cv2.imread("image.jpg")

while True:
    # 在窗口中显示图像
    cv2.imshow("Image", image)

    # 等待键盘输入,等待时间为0毫秒
    key = cv2.waitKey(0)

    # 如果按下键盘上的 "q" 键,退出循环
    if key == ord("q"):
        break

# 关闭窗口
cv2.destroyAllWindows()

窗口会显示读取的图像,然后等待键盘输入。如果按下的是 “q” 键,程序将退出循环并关闭窗口。如果按下其他键,则会继续等待键盘输入。这样就实现了交互式地显示图像。

1.2.4 destroyWindow函数

cv2.destroyWindow( winname #winname 是窗口的名称。

1.2.5 destroyAllWindows

 cv2.destroyAllWindows()#用来释放(销毁)所有窗口

在这里插入图片描述

1.3 保存图像 cv2.imwrite()

retval cv2.imwrite( filename, img[, params] )

retval 是返回值。如果保存成功,则返回 True;如果保存不成功,则返回 False。

filename 是要保存的目标文件的完整路径名,包含文件扩展名。

img 是被保存的图像。

params 是保存类型参数,是可选的

import cv2

# 读取图像
image = cv2.imread("image.jpg")

# 保存图像
retval = cv2.imwrite("saved_image.jpg", image)

# 判断是否保存成功
if retval:
    print("图像保存成功")
else:
    print("图像保存失败")

在这里插入图片描述
保存灰度图
对比一下先:
在这里插入图片描述

plt.imshow(img,cmap=plt.cm.gray)
在这里插入图片描述
为了直观用Pycharm
在这里插入图片描述

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

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

相关文章

光谱图像论文浅读

文章目录 Hyperspectral Image Super-Resolution via Deep Spatiospectral Attention Convolutional Neural Networks Hyperspectral Image Super-Resolution via Deep Spatiospectral Attention Convolutional Neural Networks 通过上采样高光谱保留其光谱特征,采用…

在R中安装CmdStanR的步骤-R4.3.1-CmdStanR-0.6.1.900

报错未安装cmdstanr 安装包官网详细介绍: R Interface to CmdStan • cmdstanrhttps://mc-stan.org/cmdstanr/ 以下是在R中安装CmdStanR的步骤: 1. 首先,需要下载和安装C编译器 例如gcc。如果您已经安装了C编译器,则可以跳过此…

【数据结构--C语言】有序表算法及其应用

有序表是指其中的所有元素以递增或递减方式有序排列。为了简单,假设有序表以递增排列。 有序表的基本运算 InitLIst(&L):初始化有序表LDestoryList(&L):销毁有序表LListEmpty(L):判断空表ListLength(L):求有…

Mysql进阶-索引篇(上)

目录 索引概述 索引结构 数据结构 二叉树 红黑树 B-Tree BTree Hash 索引分类 聚集索引&二级索引 聚集索引选取规则: 具体结构 索引基础语法 SQL性能分析 SQL执行频率 慢查询日志 profile详情 explain 索引概述 介绍: 索引( index &…

基于哈里斯鹰算法的无人机航迹规划-附代码

基于哈里斯鹰算法的无人机航迹规划 文章目录 基于哈里斯鹰算法的无人机航迹规划1.哈里斯鹰搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用哈里斯鹰算法来优化无人机航迹规划。 …

IOC课程整理-18 Spring注解

1. Spring 注解驱动编程发展历程 2. Spring 核心注解场景分类 3. Spring 注解编程模型 https://github.com/spring-projects/spring-framework/wiki/Spring-Annotation-Programming-Model 4. Spring 元注解(Meta-Annotations) 元注解(Meta-A…

PostGreSQL:JSON|JSONB数据类型

JSON JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)JSON 是轻量级的文本数据交换格式JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许…

什么是 CNN? 卷积神经网络? 怎么用 CNN 进行分类?(1)

先看卷积是啥,url: https://www.bilibili.com/video/BV1JX4y1K7Dr/?spm_id_from333.337.search-card.all.click&vd_source7a1a0bc74158c6993c7355c5490fc600 下面这个式子就是卷积 看完了,感觉似懂非懂 下一个参考视频:https://www.y…

linux PELT算法中的load计算

滑窗平均的累加计算 权重y按滑窗距离衰减,y^32 0.5,也就是经历32个周期将衰减一半的权重,假设本周期值是V,本周期的加权累加值为Vx,则: 一个完整周期是T,给一个基础值1…

【技能树笔记】网络篇——练习题解析(十)

【技能树笔记】网络篇系列前九篇 【技能树笔记】网络篇——练习题解析(一)-CSDN博客 【技能树笔记】网络篇——练习题解析(二)-CSDN博客 【技能树笔记】网络篇——练习题解析(三)-CSDN博客 【技能树笔记】网…

大数据Flink(一百零五):SQL性能调优

文章目录 SQL性能调优 一、 ​​​​​​​MiniBatch 聚合

2023 年值得关注的国外网络安全初创公司

网络安全初创公司试图解决的问题往往有点超前于主流。他们可以比大多数老牌公司更快地填补空白或新兴需求。初创公司通常可以更快地创新,因为它们不受安装基础的限制。 当然,缺点是初创公司往往缺乏资源和成熟度。公司致力于初创公司的产品或平台是有风…

JavaWeb 怎么在servlet向页面输出Html元素?

service()方法里面的方法体&#xff1a; resp.setContentType("text/html;charsetutf-8");//获得输出流PrintWriter对象PrintWriter outresp.getWriter();out.println("<html>");out.println("<head><title>a servlet</title>…

SDL事件处理以及线程使用(2)

事件使用 #include <stdio.h> #include <SDL.h>#define FF_QUIT_EVENT (SDL_USEREVENT 1) // 定义自定义事件#undef main int main() {SDL_Window* pWindow NULL;SDL_Init(SDL_INIT_VIDEO);// 创建窗口pWindow SDL_CreateWindow("Event Test Title&…

DAY38 动态规划 + 509. 斐波那契数 + 70. 爬楼梯 + 746. 使用最小花费爬楼梯

动态规划理论 动态规划&#xff0c;Dynamic Programming&#xff0c; DP&#xff0c; 如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的&#xff0c;这一点就区分于贪心&#xff0c;贪心没有状态推导…

OpenTiny Vue 支持 Vue2.7 啦!

你好&#xff0c;我是 Kagol。 前言 上个月发布了一篇 Vue2 升级 Vue3 的文章。 &#x1f596;少年&#xff0c;该升级 Vue3 了&#xff01; 里面提到使用了 ElementUI 的 Vue2 项目&#xff0c;可以通过 TinyVue 和 gogocode 快速升级到 Vue3 项目。 有朋友评论替换butto…

校园物业报修小程序开发笔记一

背景 校园规模和复杂性&#xff1a; 大型学校和校园通常拥有众多的建筑物、设施和设备&#xff0c;需要有效的维护和报修系统&#xff0c;以满足学生、教职员工和校园管理人员的需求。 学生和员工需求&#xff1a; 学生和员工在校园内可能遇到各种维修问题&#xff0c;如故障的…

精品Python的大学教室资源预约管理系统

《[含文档PPT源码等]精品基于Python的大学教室资源管理系统的设计与实现》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;python 使用框架&#xff1a;Django 前…

0028Java程序设计-智能农场监控报警系统设计与实现

文章目录 摘要目 录系统设计开发环境 摘要 我国是一个以农业为主的国家&#xff0c;在当今社会信息化迅速发展的背景下&#xff0c;将信息技术与农业相融合是必然的趋势。现代信息技术在农业生产中的运用&#xff0c;主要体现在两个领域&#xff1a;一是传感器技术&#xff1b…

基于SpringBoot和Vue的车辆违章信息查询系统

一、绪论 1.1 研究背景 当前社会交通事故频发&#xff0c;车辆违章现象屡见不鲜。为了解决这一问题&#xff0c;车辆违章信息查询系统应运而生。该系统能够自动检测车辆违章行为并提供相关信息&#xff0c;为交通管理提供了便利。 目前&#xff0c;基于 Java 语言的前后端完…